home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume7 / nethack3 / patch8f < prev    next >
Encoding:
Internet Message Format  |  1990-06-08  |  55.5 KB

  1. Path: uunet!tut.cis.ohio-state.edu!zaphod.mps.ohio-state.edu!usc!ucsd!ogicse!zephyr.ens.tek.com!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v10i024:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch8f
  5. Message-ID: <5732@tekred.CNA.TEK.COM>
  6. Date: 5 Jun 90 17:52:29 GMT
  7. Sender: news@tekred.CNA.TEK.COM
  8. Lines: 2132
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  12. Posting-number: Volume 10, Issue 24
  13. Archive-name: NetHack3/Patch8f
  14. Patch-To: NetHack3: Volume 7, Issue 56-93
  15.  
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 6 (of 24)."
  25. # Contents:  patch8.07
  26. # Wrapped by billr@saab on Mon Jun  4 15:27:16 1990
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'patch8.07' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'patch8.07'\"
  30. else
  31. echo shar: Extracting \"'patch8.07'\" \(52827 characters\)
  32. sed "s/^X//" >'patch8.07' <<'END_OF_FILE'
  33. X*** src/Old/prisym.c    Sun Jun  3 14:06:29 1990
  34. X--- src/prisym.c    Sun May 27 11:54:49 1990
  35. X***************
  36. X*** 8,14 ****
  37. X  #include "wseg.h"
  38. X  #include "lev.h"
  39. X  
  40. X! OSTATIC void FDECL(pwseg, (struct wseg *));
  41. X  #endif
  42. X  
  43. X  #ifdef OVL0
  44. X--- 8,14 ----
  45. X  #include "wseg.h"
  46. X  #include "lev.h"
  47. X  
  48. X! STATIC_DCL void FDECL(pwseg, (struct wseg *));
  49. X  #endif
  50. X  
  51. X  #ifdef OVL0
  52. X***************
  53. X*** 66,74 ****
  54. X  uchar let;
  55. X  uchar col;
  56. X  #else
  57. X! static schar prevx, prevy;
  58. X! static uchar let;
  59. X! static uchar col;
  60. X  #endif
  61. X  
  62. X      switch ((int)x) {
  63. X--- 66,74 ----
  64. X  uchar let;
  65. X  uchar col;
  66. X  #else
  67. X! static schar NEARDATA prevx, NEARDATA prevy;
  68. X! static uchar NEARDATA let;
  69. X! static uchar NEARDATA col;
  70. X  #endif
  71. X  
  72. X      switch ((int)x) {
  73. X***************
  74. X*** 115,125 ****
  75. X  uchar col;
  76. X  # endif
  77. X  #else
  78. X! static uchar let;
  79. X! static xchar cnt;
  80. X! static coord tc[COLNO];    /* but watch reflecting beams! */
  81. X  # ifdef TEXTCOLOR
  82. X! static uchar col;
  83. X  # endif
  84. X  #endif
  85. X  register int xx,yy;
  86. X--- 115,125 ----
  87. X  uchar col;
  88. X  # endif
  89. X  #else
  90. X! static uchar NEARDATA let;
  91. X! static xchar NEARDATA cnt;
  92. X! static coord NEARDATA tc[COLNO];    /* but watch reflecting beams! */
  93. X  # ifdef TEXTCOLOR
  94. X! static uchar NEARDATA col;
  95. X  # endif
  96. X  #endif
  97. X  register int xx,yy;
  98. X***************
  99. X*** 573,579 ****
  100. X  }
  101. X  
  102. X  #ifdef WORM
  103. X! XSTATIC void
  104. X  pwseg(wtmp)
  105. X  register struct wseg *wtmp;
  106. X  {
  107. X--- 573,579 ----
  108. X  }
  109. X  
  110. X  #ifdef WORM
  111. X! STATIC_OVL void
  112. X  pwseg(wtmp)
  113. X  register struct wseg *wtmp;
  114. X  {
  115. X*** src/Old/read.c    Sun Jun  3 14:06:55 1990
  116. X--- src/read.c    Thu May 31 22:13:33 1990
  117. X***************
  118. X*** 8,21 ****
  119. X  
  120. X  boolean    known;
  121. X  
  122. X! static const char readable[] = { '#', SCROLL_SYM,
  123. X  #ifdef SPELLS
  124. X      SPBOOK_SYM,
  125. X  #endif
  126. X      0 };
  127. X  
  128. X- #endif /* OVLB */
  129. X- 
  130. X  static void FDECL(explode, (struct obj *));
  131. X  static void NDECL(do_class_genocide);
  132. X  static void FDECL(stripspe,(struct obj *));
  133. X--- 8,19 ----
  134. X  
  135. X  boolean    known;
  136. X  
  137. X! static const char NEARDATA readable[] = { '#', SCROLL_SYM,
  138. X  #ifdef SPELLS
  139. X      SPBOOK_SYM,
  140. X  #endif
  141. X      0 };
  142. X  
  143. X  static void FDECL(explode, (struct obj *));
  144. X  static void NDECL(do_class_genocide);
  145. X  static void FDECL(stripspe,(struct obj *));
  146. X***************
  147. X*** 23,29 ****
  148. X  static void FDECL(p_glow2,(struct obj *,const char *));
  149. X  static void FDECL(recharge,(struct obj *,int));
  150. X  static void FDECL(forget,(BOOLEAN_P));
  151. X! OSTATIC void FDECL(show_map_spot,(int,int));
  152. X  
  153. X  #ifdef OVLB
  154. X  
  155. X--- 21,30 ----
  156. X  static void FDECL(p_glow2,(struct obj *,const char *));
  157. X  static void FDECL(recharge,(struct obj *,int));
  158. X  static void FDECL(forget,(BOOLEAN_P));
  159. X! 
  160. X! #endif /* OVLB */
  161. X! 
  162. X! STATIC_DCL void FDECL(show_map_spot,(int,int));
  163. X  
  164. X  #ifdef OVLB
  165. X  
  166. X***************
  167. X*** 571,577 ****
  168. X          register struct monst *mtmp;
  169. X  
  170. X          for(i = -bd; i <= bd; i++) for(j = -bd; j <= bd; j++)
  171. X!         if(MON_AT(u.ux+i, u.uy+j) && (mtmp = m_at(u.ux+i, u.uy+j))) {
  172. X              if(sobj->cursed) {
  173. X              if(!mtmp->mtame) mtmp->mpeaceful = 0;
  174. X              } else {
  175. X--- 572,578 ----
  176. X          register struct monst *mtmp;
  177. X  
  178. X          for(i = -bd; i <= bd; i++) for(j = -bd; j <= bd; j++)
  179. X!         if(isok(u.ux+i, u.uy+j) && (mtmp = m_at(u.ux+i, u.uy+j))) {
  180. X              if(sobj->cursed) {
  181. X              if(!mtmp->mtame) mtmp->mpeaceful = 0;
  182. X              } else {
  183. X***************
  184. X*** 656,661 ****
  185. X--- 657,669 ----
  186. X      case SCR_CHARGING:
  187. X          if (confused) {
  188. X              You("feel charged up!");
  189. X+ #ifdef SPELLS
  190. X+             if (u.uen < u.uenmax)
  191. X+             u.uen = u.uenmax;
  192. X+             else
  193. X+             u.uen = u.uenmax + d(5,4);
  194. X+             flags.botl = 1;
  195. X+ #endif
  196. X              break;
  197. X          }
  198. X          known = TRUE;
  199. X***************
  200. X*** 908,914 ****
  201. X                  if(mtmp->data == &mons[i])
  202. X                      mondead(mtmp);
  203. X                  }
  204. X!             } else if (mons[i].geno & G_GENOD)
  205. X                  pline("All %s are already nonexistent.", n);
  206. X              else
  207. X                  You("aren't permitted to genocide %s%s.",
  208. X--- 916,923 ----
  209. X                  if(mtmp->data == &mons[i])
  210. X                      mondead(mtmp);
  211. X                  }
  212. X!             } else if ((mons[i].geno & G_GENOD) &&
  213. X!               !(mons[i].geno & G_UNIQ))
  214. X                  pline("All %s are already nonexistent.", n);
  215. X              else
  216. X                  You("aren't permitted to genocide %s%s.",
  217. X***************
  218. X*** 1016,1023 ****
  219. X      } else {
  220. X          pline("Sent in some %s.", makeplural(buf));
  221. X          j = rnd(3) + 3;
  222. X!         for(i=1; i<=j; i++)
  223. X!         (void) makemon(ptr, u.ux, u.uy);
  224. X      }
  225. X  }
  226. X  
  227. X--- 1025,1039 ----
  228. X      } else {
  229. X          pline("Sent in some %s.", makeplural(buf));
  230. X          j = rnd(3) + 3;
  231. X!         for(i=1; i<=j; i++) {
  232. X!         struct monst *mmon = makemon(ptr, u.ux, u.uy);
  233. X!         struct obj *otmp;
  234. X! 
  235. X!         while(otmp = (mmon->minvent)) {
  236. X!             mmon->minvent = otmp->nobj;
  237. X!             free((genericptr_t)otmp);
  238. X!         }
  239. X!         }
  240. X      }
  241. X  }
  242. X  
  243. X***************
  244. X*** 1024,1030 ****
  245. X  #endif /* OVLB */
  246. X  #ifdef OVL0
  247. X  
  248. X! XSTATIC void
  249. X  show_map_spot(x, y)
  250. X  register int x, y;
  251. X  {
  252. X--- 1040,1046 ----
  253. X  #endif /* OVLB */
  254. X  #ifdef OVL0
  255. X  
  256. X! STATIC_OVL void
  257. X  show_map_spot(x, y)
  258. X  register int x, y;
  259. X  {
  260. X***************
  261. X*** 1161,1168 ****
  262. X          uball->owt += 15 * (1 + sobj->cursed);
  263. X          return;
  264. X      }
  265. X!     setworn(mkobj_at(CHAIN_SYM, u.ux, u.uy), W_CHAIN);
  266. X!     setworn(mkobj_at(BALL_SYM, u.ux, u.uy), W_BALL);
  267. X      uball->spe = 1;        /* special ball (see save) */
  268. X  }
  269. X  
  270. X--- 1177,1184 ----
  271. X          uball->owt += 15 * (1 + sobj->cursed);
  272. X          return;
  273. X      }
  274. X!     setworn(mkobj_at(CHAIN_SYM, u.ux, u.uy, TRUE), W_CHAIN);
  275. X!     setworn(mkobj_at(BALL_SYM, u.ux, u.uy, TRUE), W_BALL);
  276. X      uball->spe = 1;        /* special ball (see save) */
  277. X  }
  278. X  
  279. X*** src/Old/restore.c    Sun Jun  3 14:07:40 1990
  280. X--- src/restore.c    Wed May 23 17:55:45 1990
  281. X***************
  282. X*** 9,19 ****
  283. X  #include "wseg.h"
  284. X  #endif
  285. X  
  286. X  boolean restoring = FALSE;
  287. X  #ifdef TUTTI_FRUTTI
  288. X! static struct fruit *oldfruit;
  289. X  #endif
  290. X! static long omoves;
  291. X  
  292. X  /*
  293. X   * "stuff" objects back into containers (relink the fcobj list).
  294. X--- 9,28 ----
  295. X  #include "wseg.h"
  296. X  #endif
  297. X  
  298. X+ static void FDECL(stuff_objs, (struct obj *));
  299. X+ static void NDECL(find_lev_obj);
  300. X+ #ifndef NO_SIGNAL
  301. X+ static void NDECL(inven_inuse);
  302. X+ #endif
  303. X+ static struct obj * FDECL(restobjchn, (int,BOOLEAN_P));
  304. X+ static struct monst * FDECL(restmonchn, (int,BOOLEAN_P));
  305. X+ static void FDECL(restgenoinfo, (int));
  306. X+ 
  307. X  boolean restoring = FALSE;
  308. X  #ifdef TUTTI_FRUTTI
  309. X! static struct fruit NEARDATA *oldfruit;
  310. X  #endif
  311. X! static long NEARDATA omoves;
  312. X  
  313. X  /*
  314. X   * "stuff" objects back into containers (relink the fcobj list).
  315. X***************
  316. X*** 148,154 ****
  317. X      off_t differ;
  318. X  
  319. X      mread(fd, (genericptr_t)&monbegin, sizeof(monbegin));
  320. X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX)
  321. X      differ = (genericptr_t)(&mons[0]) - (genericptr_t)(monbegin);
  322. X  #else
  323. X      differ = (long)(&mons[0]) - (long)(monbegin);
  324. X--- 157,163 ----
  325. X      off_t differ;
  326. X  
  327. X      mread(fd, (genericptr_t)&monbegin, sizeof(monbegin));
  328. X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX) && !defined(VAXC)
  329. X      differ = (genericptr_t)(&mons[0]) - (genericptr_t)(monbegin);
  330. X  #else
  331. X      differ = (long)(&mons[0]) - (long)(monbegin);
  332. X***************
  333. X*** 167,173 ****
  334. X          mread(fd, (genericptr_t) mtmp, (unsigned) xl + sizeof(struct monst));
  335. X          if(!mtmp->m_id)
  336. X              mtmp->m_id = flags.ident++;
  337. X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX)
  338. X          /* ANSI type for differ is ptrdiff_t --
  339. X           * long may be wrong for segmented architecture --
  340. X           * may be better to cast pointers to (struct permonst *)
  341. X--- 176,182 ----
  342. X          mread(fd, (genericptr_t) mtmp, (unsigned) xl + sizeof(struct monst));
  343. X          if(!mtmp->m_id)
  344. X              mtmp->m_id = flags.ident++;
  345. X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX) && !defined(VAXC)
  346. X          /* ANSI type for differ is ptrdiff_t --
  347. X           * long may be wrong for segmented architecture --
  348. X           * may be better to cast pointers to (struct permonst *)
  349. X***************
  350. X*** 218,228 ****
  351. X  #ifdef TUTTI_FRUTTI
  352. X      struct fruit *fruit;
  353. X  #endif
  354. X- #ifdef MSDOS
  355. X      struct flag oldflags;
  356. X  
  357. X!     oldflags = flags;    /* Save flags set in the config file */
  358. X! #endif
  359. X  #ifdef ZEROCOMP
  360. X      minit();
  361. X  #endif
  362. X--- 227,236 ----
  363. X  #ifdef TUTTI_FRUTTI
  364. X      struct fruit *fruit;
  365. X  #endif
  366. X      struct flag oldflags;
  367. X  
  368. X!     oldflags = flags;
  369. X! 
  370. X  #ifdef ZEROCOMP
  371. X      minit();
  372. X  #endif
  373. X***************
  374. X*** 249,268 ****
  375. X          return(0);
  376. X          }
  377. X      mread(fd, (genericptr_t) &flags, sizeof(struct flag));
  378. X!     /* Some config file OPTIONS take precedence over those in save file.
  379. X       */
  380. X! #ifdef MSDOS
  381. X! #ifdef DGK
  382. X      flags.rawio = oldflags.rawio;
  383. X- #ifdef DECRAINBOW
  384. X-     flags.DECRainbow = oldflags.DECRainbow;
  385. X- #endif /* DECRAINBOW */
  386. X      flags.IBMBIOS = oldflags.IBMBIOS;
  387. X  #endif
  388. X  #ifdef TEXTCOLOR
  389. X      flags.use_color = oldflags.use_color;
  390. X  #endif
  391. X! #endif /* MSDOS */
  392. X      mread(fd, (genericptr_t) &dlevel, sizeof dlevel);
  393. X      mread(fd, (genericptr_t) &maxdlevel, sizeof maxdlevel);
  394. X      mread(fd, (genericptr_t) &moves, sizeof moves);
  395. X--- 257,275 ----
  396. X          return(0);
  397. X          }
  398. X      mread(fd, (genericptr_t) &flags, sizeof(struct flag));
  399. X!     /* Some config file and command line OPTIONS take precedence over
  400. X!      * those in save file.
  401. X       */
  402. X!     flags.DECgraphics = oldflags.DECgraphics;
  403. X!     flags.IBMgraphics = oldflags.IBMgraphics;
  404. X! #if defined(MSDOS) && defined(DGK)
  405. X      flags.rawio = oldflags.rawio;
  406. X      flags.IBMBIOS = oldflags.IBMBIOS;
  407. X  #endif
  408. X  #ifdef TEXTCOLOR
  409. X      flags.use_color = oldflags.use_color;
  410. X  #endif
  411. X! 
  412. X      mread(fd, (genericptr_t) &dlevel, sizeof dlevel);
  413. X      mread(fd, (genericptr_t) &maxdlevel, sizeof maxdlevel);
  414. X      mread(fd, (genericptr_t) &moves, sizeof moves);
  415. X***************
  416. X*** 758,771 ****
  417. X        for(mtmp = fmon; mtmp; mtmp = mtmp2) {
  418. X  
  419. X          mtmp2 = mtmp->nmon;
  420. X!         if(mtmp->data->geno & G_GENOD) {
  421. X! #ifdef KOPS
  422. X!             allow_kops = FALSE;
  423. X! #endif
  424. X!             mondead(mtmp);
  425. X! #ifdef KOPS
  426. X!             allow_kops = TRUE;
  427. X! #endif
  428. X              continue;
  429. X          }
  430. X  
  431. X--- 765,784 ----
  432. X        for(mtmp = fmon; mtmp; mtmp = mtmp2) {
  433. X  
  434. X          mtmp2 = mtmp->nmon;
  435. X!         if((mtmp->data->geno&G_GENOD) && !(mtmp->data->geno&G_UNIQ)) {
  436. X!             /* mondead() would try to link the monster's objects
  437. X!              * into fobj and the appropriate nexthere chain.
  438. X!              * unfortunately, such things will not have sane
  439. X!              * values until after find_lev_obj() well below
  440. X!              * here, so we'd go chasing random pointers if we
  441. X!              * tried that.  we could save the monster's objects
  442. X!              * in another chain and insert them in the level
  443. X!              * later, but that's a lot of work for very little
  444. X!              * gain.  hence, just throw the objects away via
  445. X!              * mongone() and pretend the monster wandered off
  446. X!              * somewhere private before the genocide.
  447. X!              */
  448. X!             mongone(mtmp);
  449. X              continue;
  450. X          }
  451. X  
  452. X***************
  453. X*** 874,884 ****
  454. X  #ifdef ZEROCOMP
  455. X  #define RLESC '\0'     /* Leading character for run of RLESC's */
  456. X  
  457. X! static unsigned char inbuf[BUFSZ];
  458. X! static unsigned short inbufp = 0;
  459. X! static unsigned short inbufsz = 0;
  460. X! static short inrunlength = -1;
  461. X! static int mreadfd;
  462. X  
  463. X  static int
  464. X  mgetc()
  465. X--- 887,898 ----
  466. X  #ifdef ZEROCOMP
  467. X  #define RLESC '\0'     /* Leading character for run of RLESC's */
  468. X  
  469. X! static unsigned char NEARDATA inbuf[BUFSZ];
  470. X! static unsigned short NEARDATA inbufp = 0;
  471. X! static unsigned short NEARDATA inbufsz = 0;
  472. X! static short NEARDATA inrunlength = -1;
  473. X! static int NEARDATA mreadfd;
  474. X! static int NDECL(mgetc);
  475. X  
  476. X  static int
  477. X  mgetc()
  478. X*** src/Old/rip.c    Sun Jun  3 14:08:20 1990
  479. X--- src/rip.c    Wed Mar 21 19:41:27 1990
  480. X***************
  481. X*** 3,9 ****
  482. X  /* NetHack may be freely redistributed.  See license for details. */
  483. X  
  484. X  #include "hack.h"
  485. X- #include <ctype.h>
  486. X  
  487. X  static void FDECL(center,(int,char *));
  488. X  
  489. X--- 3,8 ----
  490. X*** src/Old/rumors.c    Sun Jun  3 14:08:43 1990
  491. X--- src/rumors.c    Fri Mar 30 20:55:17 1990
  492. X***************
  493. X*** 23,29 ****
  494. X--- 23,31 ----
  495. X   * (but not terminated) by "-----" lines.
  496. X   */
  497. X  static void NDECL(init_rumors);
  498. X+ #ifdef ORACLE
  499. X  static void NDECL(outoracle);
  500. X+ #endif
  501. X  long first_rumor = sizeof(long);
  502. X  long true_rumor_size, false_rumor_size, end_rumor_file;
  503. X  #ifdef ORACLE
  504. X*** src/Old/save.c    Sun Jun  3 14:08:59 1990
  505. X--- src/save.c    Sat May 26 13:21:15 1990
  506. X***************
  507. X*** 14,26 ****
  508. X  #ifndef NO_SIGNAL
  509. X  #include <signal.h>
  510. X  #endif /* !NO_SIGNAL */
  511. X! #if defined(EXPLORE_MODE) && !defined(LSC) && !defined(O_RDONLY) && !defined(AZTEC_C)
  512. X  #include <fcntl.h>
  513. X  #endif /* EXPLORE_MODE */
  514. X  
  515. X  boolean hu;        /* set during hang-up */
  516. X  
  517. X! #if defined(DGK)
  518. X  struct finfo fileinfo[MAXLEVEL+1];
  519. X  long bytes_counted;
  520. X  int count_only;
  521. X--- 14,26 ----
  522. X  #ifndef NO_SIGNAL
  523. X  #include <signal.h>
  524. X  #endif /* !NO_SIGNAL */
  525. X! #if defined(EXPLORE_MODE) && !defined(LSC) && !defined(O_WRONLY) && !defined(AZTEC_C)
  526. X  #include <fcntl.h>
  527. X  #endif /* EXPLORE_MODE */
  528. X  
  529. X  boolean hu;        /* set during hang-up */
  530. X  
  531. X! #ifdef DGK
  532. X  struct finfo fileinfo[MAXLEVEL+1];
  533. X  long bytes_counted;
  534. X  int count_only;
  535. X***************
  536. X*** 28,46 ****
  537. X  boolean level_exists[MAXLEVEL+1];
  538. X  #endif
  539. X  
  540. X! #if defined(DGK)
  541. X! static void savelev0();
  542. X  #endif /* DGK */
  543. X! static void saveobjchn();
  544. X! static void savemonchn();
  545. X! static void savegoldchn();
  546. X! static void savetrapchn();
  547. X! static void savegenoinfo();
  548. X! #if defined(DGK)
  549. X! static boolean swapout_oldest();
  550. X! static void copyfile();
  551. X! #endif /* defined(DGK) */
  552. X! static void spill_objs();
  553. X  #ifdef __GNULINT__
  554. X  static long nulls[10];
  555. X  #else
  556. X--- 28,47 ----
  557. X  boolean level_exists[MAXLEVEL+1];
  558. X  #endif
  559. X  
  560. X! #ifdef ZEROCOMP
  561. X! static void FDECL(bputc, (UCHAR_P));
  562. X! #endif
  563. X! static void FDECL(saveobjchn, (int,struct obj *));
  564. X! static void FDECL(savemonchn, (int,struct monst *));
  565. X! static void FDECL(savegoldchn, (int,struct gold *));
  566. X! static void FDECL(savetrapchn, (int,struct trap *));
  567. X! static void FDECL(savegenoinfo, (int));
  568. X! #ifdef DGK
  569. X! static void FDECL(savelev0, (int,XCHAR_P));
  570. X! static boolean NDECL(swapout_oldest);
  571. X! static void FDECL(copyfile, (char *,char *));
  572. X  #endif /* DGK */
  573. X! static void FDECL(spill_objs, (struct obj *));
  574. X  #ifdef __GNULINT__
  575. X  static long nulls[10];
  576. X  #else
  577. X***************
  578. X*** 93,99 ****
  579. X      register int fd, ofd;
  580. X      int tmp;        /* not register ! */
  581. X      xchar ltmp;
  582. X! #if defined(DGK)
  583. X      long fds, needed;
  584. X      int mode;
  585. X  #endif
  586. X--- 94,100 ----
  587. X      register int fd, ofd;
  588. X      int tmp;        /* not register ! */
  589. X      xchar ltmp;
  590. X! #ifdef DGK
  591. X      long fds, needed;
  592. X      int mode;
  593. X  #endif
  594. X***************
  595. X*** 158,189 ****
  596. X      {
  597. X          Str255    fileName;
  598. X          OSErr    er;
  599. X!         OSType    fileType;
  600. X!         Point    where;
  601. X!         SFReply    reply;
  602. X!         char    *prompt;
  603. X          
  604. X!         savenum = 0;
  605. X!         (void)GetVol(&fileName, &tmp);
  606. X          Strcpy((char *)&fileName[1], SAVEF);
  607. X          fileName[0] = strlen(SAVEF);
  608. X!         where.h = where.v =
  609. X!             (SCREEN_BITS.bounds.bottom - SCREEN_BITS.bounds.top) / 4;
  610. X!         prompt = "\022Save character in:";
  611. X!         SFPutFile(where, prompt, fileName, 0L, &reply);
  612. X!         if (reply.good) {
  613. X!             SetVol(0L, savenum = reply.vRefNum);
  614. X!             strncpy(SAVEF, (char *)&reply.fName[1],
  615. X!                     (short)reply.fName[0]);
  616. X!             SAVEF[(short)reply.fName[0]] = '\0';
  617. X!             Strcpy((char *)fileName, (char *)reply.fName);
  618. X!         }
  619. X!         
  620. X!         fileType = (discover == TRUE) ? EXPLORE_TYPE : SAVE_TYPE;
  621. X!         if (er = Create(&fileName, 0, CREATOR, fileType))
  622. X              SysBeep(1);
  623. X      }
  624. X-     fd = open(SAVEF, O_WRONLY | O_BINARY);
  625. X  # else
  626. X      fd = creat(SAVEF, FCMASK);
  627. X  # endif /* MACOS */
  628. X--- 159,178 ----
  629. X      {
  630. X          Str255    fileName;
  631. X          OSErr    er;
  632. X!         struct term_info    *t;
  633. X!         extern WindowPtr    HackWindow;
  634. X          
  635. X!         t = (term_info *)GetWRefCon(HackWindow);
  636. X!         (void)GetVol(&fileName,&tmp);    /* tmp is old volume */
  637. X!         (void)SetVol(0L, savenum = t->recordVRefNum);    /* savenum is used below */
  638. X          Strcpy((char *)&fileName[1], SAVEF);
  639. X          fileName[0] = strlen(SAVEF);
  640. X! 
  641. X!         if (er = Create(&fileName, 0, CREATOR, discover ? EXPLORE_TYPE : SAVE_TYPE))
  642. X              SysBeep(1);
  643. X+         fd = open(SAVEF, O_WRONLY | O_BINARY);
  644. X+         (void)SetVol(0L, t->system.sysVRefNum);
  645. X      }
  646. X  # else
  647. X      fd = creat(SAVEF, FCMASK);
  648. X  # endif /* MACOS */
  649. X***************
  650. X*** 193,209 ****
  651. X  #ifdef AMIGA_WBENCH
  652. X          ami_wbench_unlink(SAVEF);
  653. X  #endif
  654. X          (void) unlink(SAVEF);        /* ab@unido */
  655. X-         return(0);
  656. X-     }
  657. X  #ifdef MACOS
  658. X!     (void)SetVol(0L,tmp);
  659. X  #endif
  660. X      if(flags.moonphase == FULL_MOON)    /* ut-sally!fletcher */
  661. X          change_luck(-1);        /* and unido!ab */
  662. X      home();
  663. X      cl_end();
  664. X! #if defined(DGK)
  665. X      if(!hu) msmsg("Saving: ");
  666. X      mode = COUNT;
  667. X  again:
  668. X--- 182,201 ----
  669. X  #ifdef AMIGA_WBENCH
  670. X          ami_wbench_unlink(SAVEF);
  671. X  #endif
  672. X+ #ifdef MACOS
  673. X+         (void)SetVol(0L, savenum);
  674. X+ #endif
  675. X          (void) unlink(SAVEF);        /* ab@unido */
  676. X  #ifdef MACOS
  677. X!         (void)SetVol(0L, tmp);
  678. X  #endif
  679. X+         return(0);
  680. X+     }
  681. X      if(flags.moonphase == FULL_MOON)    /* ut-sally!fletcher */
  682. X          change_luck(-1);        /* and unido!ab */
  683. X      home();
  684. X      cl_end();
  685. X! #ifdef DGK
  686. X      if(!hu) msmsg("Saving: ");
  687. X      mode = COUNT;
  688. X  again:
  689. X***************
  690. X*** 261,267 ****
  691. X      savefruitchn(fd);
  692. X  #endif
  693. X      savenames(fd);
  694. X! #if defined(DGK)
  695. X      if (mode == COUNT) {
  696. X  # ifdef ZEROCOMP
  697. X          bflush(fd);
  698. X--- 253,259 ----
  699. X      savefruitchn(fd);
  700. X  #endif
  701. X      savenames(fd);
  702. X! #ifdef DGK
  703. X      if (mode == COUNT) {
  704. X  # ifdef ZEROCOMP
  705. X          bflush(fd);
  706. X***************
  707. X*** 294,300 ****
  708. X      }
  709. X  #endif
  710. X      for(ltmp = (xchar)1; ltmp <= maxdlevel; ltmp++) {
  711. X! #if defined(DGK)
  712. X          if (ltmp == dlevel || !fileinfo[ltmp].where) continue;
  713. X          if (fileinfo[ltmp].where != ACTIVE)
  714. X              swapin_file(ltmp);
  715. X--- 286,292 ----
  716. X      }
  717. X  #endif
  718. X      for(ltmp = (xchar)1; ltmp <= maxdlevel; ltmp++) {
  719. X! #ifdef DGK
  720. X          if (ltmp == dlevel || !fileinfo[ltmp].where) continue;
  721. X          if (fileinfo[ltmp].where != ACTIVE)
  722. X              swapin_file(ltmp);
  723. X***************
  724. X*** 315,320 ****
  725. X--- 307,315 ----
  726. X              (void)SetVol(0L, savenum);
  727. X  #endif
  728. X              (void) unlink(SAVEF);
  729. X+ #ifdef MACOS
  730. X+             (void)SetVol(0L, tmp);
  731. X+ #endif
  732. X  #ifdef AMIGA_WBENCH
  733. X              ami_wbench_unlink(SAVEF);
  734. X  #endif
  735. X***************
  736. X*** 327,333 ****
  737. X          getlev(ofd, hackpid, ltmp, FALSE);
  738. X          (void) close(ofd);
  739. X          bwrite(fd, (genericptr_t) <mp, sizeof ltmp);  /* level number */
  740. X! #if defined(DGK)
  741. X          savelev(fd, ltmp, WRITE);            /* actual level */
  742. X  #else
  743. X          savelev(fd, ltmp);            /* actual level */
  744. X--- 322,328 ----
  745. X          getlev(ofd, hackpid, ltmp, FALSE);
  746. X          (void) close(ofd);
  747. X          bwrite(fd, (genericptr_t) <mp, sizeof ltmp);  /* level number */
  748. X! #ifdef DGK
  749. X          savelev(fd, ltmp, WRITE);            /* actual level */
  750. X  #else
  751. X          savelev(fd, ltmp);            /* actual level */
  752. X***************
  753. X*** 355,364 ****
  754. X  #ifdef AMIGA_WBENCH
  755. X      ami_wbench_iconwrite(SAVEF);
  756. X  #endif
  757. X      return(1);
  758. X  }
  759. X  
  760. X! #if defined(DGK)
  761. X  boolean
  762. X  savelev(fd, lev, mode)
  763. X  int fd;
  764. X--- 350,362 ----
  765. X  #ifdef AMIGA_WBENCH
  766. X      ami_wbench_iconwrite(SAVEF);
  767. X  #endif
  768. X+ #ifdef MACOS
  769. X+     (void)SetVol(0L, tmp);
  770. X+ #endif
  771. X      return(1);
  772. X  }
  773. X  
  774. X! #ifdef DGK
  775. X  boolean
  776. X  savelev(fd, lev, mode)
  777. X  int fd;
  778. X***************
  779. X*** 404,410 ****
  780. X  xchar lev;
  781. X  {
  782. X  #ifdef WORM
  783. X!     register struct wseg *wtmp;
  784. X      register int tmp;
  785. X  #endif
  786. X  #ifdef TOS
  787. X--- 402,408 ----
  788. X  xchar lev;
  789. X  {
  790. X  #ifdef WORM
  791. X!     register struct wseg *wtmp, *wtmp2;
  792. X      register int tmp;
  793. X  #endif
  794. X  #ifdef TOS
  795. X***************
  796. X*** 412,418 ****
  797. X  #endif
  798. X  
  799. X      if(fd < 0) panic("Save on bad file!");    /* impossible */
  800. X! #if !defined(DGK)
  801. X      if(lev >= 0 && lev <= MAXLEVEL)
  802. X          level_exists[lev] = TRUE;
  803. X  #endif
  804. X--- 410,416 ----
  805. X  #endif
  806. X  
  807. X      if(fd < 0) panic("Save on bad file!");    /* impossible */
  808. X! #ifndef DGK
  809. X      if(lev >= 0 && lev <= MAXLEVEL)
  810. X          level_exists[lev] = TRUE;
  811. X  #endif
  812. X***************
  813. X*** 490,499 ****
  814. X  #ifdef WORM
  815. X      bwrite(fd,(genericptr_t) wsegs,sizeof(wsegs));
  816. X      for(tmp=1; tmp<32; tmp++){
  817. X!         for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp->nseg){
  818. X              bwrite(fd,(genericptr_t) wtmp,sizeof(struct wseg));
  819. X          }
  820. X! #if defined(DGK)
  821. X          if (!count_only)
  822. X  #endif
  823. X              wsegs[tmp] = 0;
  824. X--- 488,502 ----
  825. X  #ifdef WORM
  826. X      bwrite(fd,(genericptr_t) wsegs,sizeof(wsegs));
  827. X      for(tmp=1; tmp<32; tmp++){
  828. X!         for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp2){
  829. X!             wtmp2 = wtmp->nseg;
  830. X              bwrite(fd,(genericptr_t) wtmp,sizeof(struct wseg));
  831. X+ #ifdef DGK
  832. X+             if (!count_only)
  833. X+ #endif
  834. X+                 free((genericptr_t) wtmp);
  835. X          }
  836. X! #ifdef DGK
  837. X          if (!count_only)
  838. X  #endif
  839. X              wsegs[tmp] = 0;
  840. X***************
  841. X*** 500,506 ****
  842. X      }
  843. X      bwrite(fd,(genericptr_t) wgrowtime,sizeof(wgrowtime));
  844. X  #endif /* WORM /**/
  845. X! #if defined(DGK)
  846. X      if (count_only)    return;
  847. X  #endif
  848. X      billobjs = 0;
  849. X--- 503,509 ----
  850. X      }
  851. X      bwrite(fd,(genericptr_t) wgrowtime,sizeof(wgrowtime));
  852. X  #endif /* WORM /**/
  853. X! #ifdef DGK
  854. X      if (count_only)    return;
  855. X  #endif
  856. X      billobjs = 0;
  857. X***************
  858. X*** 515,524 ****
  859. X  #define RLESC '\0'    /* Leading character for run of LRESC's */
  860. X  #define flushoutrun(ln) bputc(RLESC); bputc(ln); ln = -1;
  861. X  
  862. X! static unsigned char outbuf[BUFSZ];
  863. X! static unsigned short outbufp = 0;
  864. X! static short outrunlength = -1;
  865. X! static int bwritefd;
  866. X  
  867. X  /*dbg()
  868. X  {
  869. X--- 518,527 ----
  870. X  #define RLESC '\0'    /* Leading character for run of LRESC's */
  871. X  #define flushoutrun(ln) bputc(RLESC); bputc(ln); ln = -1;
  872. X  
  873. X! static unsigned char NEARDATA outbuf[BUFSZ];
  874. X! static unsigned short NEARDATA outbufp = 0;
  875. X! static short NEARDATA outrunlength = -1;
  876. X! static int NEARDATA bwritefd;
  877. X  
  878. X  /*dbg()
  879. X  {
  880. X***************
  881. X*** 549,555 ****
  882. X        flushoutrun(outrunlength);
  883. X        }
  884. X        if (outbufp) {
  885. X! #if defined(DGK)
  886. X        if (!count_only)    /* flush buffer */
  887. X  #endif
  888. X            (void) write(fd, outbuf, outbufp);
  889. X--- 552,558 ----
  890. X        flushoutrun(outrunlength);
  891. X        }
  892. X        if (outbufp) {
  893. X! #ifdef DGK
  894. X        if (!count_only)    /* flush buffer */
  895. X  #endif
  896. X            (void) write(fd, outbuf, outbufp);
  897. X***************
  898. X*** 587,593 ****
  899. X  register genericptr_t loc;
  900. X  register unsigned num;
  901. X  {
  902. X! #if defined(DGK)
  903. X      bytes_counted += num;
  904. X      if (!count_only)
  905. X  #endif
  906. X--- 590,596 ----
  907. X  register genericptr_t loc;
  908. X  register unsigned num;
  909. X  {
  910. X! #ifdef DGK
  911. X      bytes_counted += num;
  912. X      if (!count_only)
  913. X  #endif
  914. X***************
  915. X*** 620,626 ****
  916. X          xl = otmp->onamelth;
  917. X          bwrite(fd, (genericptr_t) &xl, sizeof(int));
  918. X          bwrite(fd, (genericptr_t) otmp, xl + sizeof(struct obj));
  919. X! #if defined(DGK)
  920. X          if (!count_only)
  921. X  #endif
  922. X          free((genericptr_t) otmp);
  923. X--- 623,629 ----
  924. X          xl = otmp->onamelth;
  925. X          bwrite(fd, (genericptr_t) &xl, sizeof(int));
  926. X          bwrite(fd, (genericptr_t) otmp, xl + sizeof(struct obj));
  927. X! #ifdef DGK
  928. X          if (!count_only)
  929. X  #endif
  930. X          free((genericptr_t) otmp);
  931. X***************
  932. X*** 647,653 ****
  933. X          bwrite(fd, (genericptr_t) &xl, sizeof(int));
  934. X          bwrite(fd, (genericptr_t) mtmp, xl + sizeof(struct monst));
  935. X          if(mtmp->minvent) saveobjchn(fd,mtmp->minvent);
  936. X! #if defined(DGK)
  937. X          if (!count_only)
  938. X  #endif
  939. X          free((genericptr_t) mtmp);
  940. X--- 650,656 ----
  941. X          bwrite(fd, (genericptr_t) &xl, sizeof(int));
  942. X          bwrite(fd, (genericptr_t) mtmp, xl + sizeof(struct monst));
  943. X          if(mtmp->minvent) saveobjchn(fd,mtmp->minvent);
  944. X! #ifdef DGK
  945. X          if (!count_only)
  946. X  #endif
  947. X          free((genericptr_t) mtmp);
  948. X***************
  949. X*** 665,671 ****
  950. X      while(gold) {
  951. X          gold2 = gold->ngold;
  952. X          bwrite(fd, (genericptr_t) gold, sizeof(struct gold));
  953. X! #if defined(DGK)
  954. X          if (!count_only)
  955. X  #endif
  956. X              free((genericptr_t) gold);
  957. X--- 668,674 ----
  958. X      while(gold) {
  959. X          gold2 = gold->ngold;
  960. X          bwrite(fd, (genericptr_t) gold, sizeof(struct gold));
  961. X! #ifdef DGK
  962. X          if (!count_only)
  963. X  #endif
  964. X              free((genericptr_t) gold);
  965. X***************
  966. X*** 683,689 ****
  967. X      while(trap) {
  968. X          trap2 = trap->ntrap;
  969. X          bwrite(fd, (genericptr_t) trap, sizeof(struct trap));
  970. X! #if defined(DGK)
  971. X          if (!count_only)
  972. X  #endif
  973. X              free((genericptr_t) trap);
  974. X--- 686,692 ----
  975. X      while(trap) {
  976. X          trap2 = trap->ntrap;
  977. X          bwrite(fd, (genericptr_t) trap, sizeof(struct trap));
  978. X! #ifdef DGK
  979. X          if (!count_only)
  980. X  #endif
  981. X              free((genericptr_t) trap);
  982. X***************
  983. X*** 710,716 ****
  984. X          if (f1->fid >= 0) {
  985. X              bwrite(fd, (genericptr_t) f1, sizeof(struct fruit));
  986. X          }
  987. X! #if defined(DGK)
  988. X          if (!count_only)
  989. X  #endif
  990. X              free((genericptr_t) f1);
  991. X--- 713,719 ----
  992. X          if (f1->fid >= 0) {
  993. X              bwrite(fd, (genericptr_t) f1, sizeof(struct fruit));
  994. X          }
  995. X! #ifdef DGK
  996. X          if (!count_only)
  997. X  #endif
  998. X              free((genericptr_t) f1);
  999. X***************
  1000. X*** 730,736 ****
  1001. X          bwrite(fd, (genericptr_t) &(mons[i].geno), sizeof(unsigned));
  1002. X  }
  1003. X  
  1004. X! #if defined(DGK)
  1005. X  boolean
  1006. X  swapin_file(lev)
  1007. X  int lev;
  1008. X--- 733,739 ----
  1009. X          bwrite(fd, (genericptr_t) &(mons[i].geno), sizeof(unsigned));
  1010. X  }
  1011. X  
  1012. X! #ifdef DGK
  1013. X  boolean
  1014. X  swapin_file(lev)
  1015. X  int lev;
  1016. X***************
  1017. X*** 744,755 ****
  1018. X      while (fileinfo[lev].size > freediskspace(to))
  1019. X          if (!swapout_oldest())
  1020. X              return FALSE;
  1021. X! #ifdef WIZARD
  1022. X      if (wizard) {
  1023. X          pline("Swapping in `%s'", from);
  1024. X          (void) fflush(stdout);
  1025. X      }
  1026. X! #endif
  1027. X      copyfile(from, to);
  1028. X      (void) unlink(from);
  1029. X      fileinfo[lev].where = ACTIVE;
  1030. X--- 747,758 ----
  1031. X      while (fileinfo[lev].size > freediskspace(to))
  1032. X          if (!swapout_oldest())
  1033. X              return FALSE;
  1034. X! # ifdef WIZARD
  1035. X      if (wizard) {
  1036. X          pline("Swapping in `%s'", from);
  1037. X          (void) fflush(stdout);
  1038. X      }
  1039. X! # endif
  1040. X      copyfile(from, to);
  1041. X      (void) unlink(from);
  1042. X      fileinfo[lev].where = ACTIVE;
  1043. X***************
  1044. X*** 776,787 ****
  1045. X      Sprintf(to, "%s%s", permbones, alllevels);
  1046. X      name_file(from, oldest);
  1047. X      name_file(to, oldest);
  1048. X! #ifdef WIZARD
  1049. X      if (wizard) {
  1050. X          pline("Swapping out `%s'.", from);
  1051. X          (void) fflush(stdout);
  1052. X      }
  1053. X! #endif
  1054. X      copyfile(from, to);
  1055. X      (void) unlink(from);
  1056. X      fileinfo[oldest].where = SWAPPED;
  1057. X--- 779,790 ----
  1058. X      Sprintf(to, "%s%s", permbones, alllevels);
  1059. X      name_file(from, oldest);
  1060. X      name_file(to, oldest);
  1061. X! # ifdef WIZARD
  1062. X      if (wizard) {
  1063. X          pline("Swapping out `%s'.", from);
  1064. X          (void) fflush(stdout);
  1065. X      }
  1066. X! # endif
  1067. X      copyfile(from, to);
  1068. X      (void) unlink(from);
  1069. X      fileinfo[oldest].where = SWAPPED;
  1070. X***************
  1071. X*** 793,803 ****
  1072. X  copyfile(from, to)
  1073. X  char *from, *to;
  1074. X  {
  1075. X! #ifdef TOS
  1076. X  
  1077. X      if (_copyfile(from, to))
  1078. X          panic("Can't copy %s to %s\n", from, to);
  1079. X! #else
  1080. X      char buf[BUFSIZ];
  1081. X      int nfrom, nto, fdfrom, fdto;
  1082. X  
  1083. X--- 796,806 ----
  1084. X  copyfile(from, to)
  1085. X  char *from, *to;
  1086. X  {
  1087. X! # ifdef TOS
  1088. X  
  1089. X      if (_copyfile(from, to))
  1090. X          panic("Can't copy %s to %s\n", from, to);
  1091. X! # else
  1092. X      char buf[BUFSIZ];
  1093. X      int nfrom, nto, fdfrom, fdto;
  1094. X  
  1095. X***************
  1096. X*** 813,819 ****
  1097. X      } while (nfrom == BUFSIZ);
  1098. X      (void) close(fdfrom);
  1099. X      (void) close(fdto);
  1100. X! #endif /* TOS */
  1101. X  }
  1102. X  #endif
  1103. X  
  1104. X--- 816,822 ----
  1105. X      } while (nfrom == BUFSIZ);
  1106. X      (void) close(fdfrom);
  1107. X      (void) close(fdto);
  1108. X! # endif /* TOS */
  1109. X  }
  1110. X  #endif
  1111. X  
  1112. X*** src/Old/search.c    Sun Jun  3 14:09:33 1990
  1113. X--- src/search.c    Thu May 31 22:13:35 1990
  1114. X***************
  1115. X*** 7,15 ****
  1116. X  #  include "artifact.h"
  1117. X  #endif
  1118. X  
  1119. X- static void FDECL(findone,(XCHAR_P,XCHAR_P,int *));
  1120. X- 
  1121. X  #ifdef OVLB
  1122. X  
  1123. X  static void
  1124. X  findone(zx,zy,num)
  1125. X--- 7,15 ----
  1126. X  #  include "artifact.h"
  1127. X  #endif
  1128. X  
  1129. X  #ifdef OVLB
  1130. X+ 
  1131. X+ static void FDECL(findone,(XCHAR_P,XCHAR_P,int *));
  1132. X  
  1133. X  static void
  1134. X  findone(zx,zy,num)
  1135. X*** src/Old/shk.c    Sun Jun  3 14:09:51 1990
  1136. X--- src/shk.c    Sat Jun  2 19:44:59 1990
  1137. X***************
  1138. X*** 8,16 ****
  1139. X  
  1140. X  #include "eshk.h"
  1141. X  
  1142. X! #ifdef KOPS
  1143. X! static int FDECL(makekops, (coord *));
  1144. X  static void NDECL(kops_gone);
  1145. X  #endif /* KOPS */
  1146. X  
  1147. X  #define    NOTANGRY(mon)    mon->mpeaceful
  1148. X--- 8,19 ----
  1149. X  
  1150. X  #include "eshk.h"
  1151. X  
  1152. X! 
  1153. X! # ifdef KOPS
  1154. X! STATIC_DCL int FDECL(makekops, (coord *));
  1155. X! # ifdef OVLB
  1156. X  static void NDECL(kops_gone);
  1157. X+ # endif /* OVLB */
  1158. X  #endif /* KOPS */
  1159. X  
  1160. X  #define    NOTANGRY(mon)    mon->mpeaceful
  1161. X***************
  1162. X*** 18,37 ****
  1163. X  
  1164. X  /* Descriptor of current shopkeeper. Note that the bill need not be
  1165. X     per-shopkeeper, since it is valid only when in a shop. */
  1166. X! VSTATIC struct monst *shopkeeper;
  1167. X! VSTATIC struct bill_x *bill;
  1168. X! VSTATIC int shlevel;        /* level of this shopkeeper */
  1169. X  /* struct obj *billobjs;    /* objects on bill with bp->useup */
  1170. X                  /* only accessed here and by save & restore */
  1171. X! VSTATIC long int total;     /* filled by addupbill() */
  1172. X! VSTATIC long int followmsg;    /* last time of follow message */
  1173. X  
  1174. X! static void setpaid(), FDECL(findshk, (int));
  1175. X! static int FDECL(dopayobj, (struct bill_x *)), FDECL(getprice, (struct obj *));
  1176. X! static struct obj *FDECL(bp_to_obj, (struct bill_x *));
  1177. X  
  1178. X  #ifdef OVLB
  1179. X  
  1180. X  /*
  1181. X      invariants: obj->unpaid iff onbill(obj) [unless bp->useup]
  1182. X          obj->quan <= bp->bquan
  1183. X--- 21,49 ----
  1184. X  
  1185. X  /* Descriptor of current shopkeeper. Note that the bill need not be
  1186. X     per-shopkeeper, since it is valid only when in a shop. */
  1187. X! STATIC_VAR struct monst NEARDATA *shopkeeper;
  1188. X! STATIC_VAR struct bill_x NEARDATA *bill;
  1189. X! STATIC_VAR int NEARDATA shlevel; /* level of this shopkeeper */
  1190. X  /* struct obj *billobjs;    /* objects on bill with bp->useup */
  1191. X                  /* only accessed here and by save & restore */
  1192. X! STATIC_VAR long int NEARDATA total;     /* filled by addupbill() */
  1193. X! STATIC_VAR long int NEARDATA followmsg;    /* last time of follow message */
  1194. X  
  1195. X! STATIC_DCL void NDECL(setpaid);
  1196. X! STATIC_DCL void NDECL(addupbill);
  1197. X! STATIC_DCL boolean FDECL(monstinroom, (struct permonst *,int));
  1198. X! STATIC_DCL void FDECL(findshk, (int));
  1199. X  
  1200. X  #ifdef OVLB
  1201. X  
  1202. X+ static struct bill_x * FDECL(onbill, (struct obj *));
  1203. X+ static long FDECL(check_credit, (long,struct monst *));
  1204. X+ static void FDECL(pay, (long,struct monst *));
  1205. X+ static unsigned FDECL(get_cost, (struct obj *));
  1206. X+ static unsigned FDECL(cost_per_charge, (struct obj *));
  1207. X+ static int FDECL(dopayobj, (struct bill_x *)), FDECL(getprice, (struct obj *));
  1208. X+ static struct obj *FDECL(bp_to_obj, (struct bill_x *));
  1209. X+ 
  1210. X  /*
  1211. X      invariants: obj->unpaid iff onbill(obj) [unless bp->useup]
  1212. X          obj->quan <= bp->bquan
  1213. X***************
  1214. X*** 69,75 ****
  1215. X      }
  1216. X  }
  1217. X  
  1218. X! static void
  1219. X  setpaid(){    /* caller has checked that shopkeeper exists */
  1220. X          /* either we paid or left the shop or he just died */
  1221. X      register struct obj *obj;
  1222. X--- 81,87 ----
  1223. X      }
  1224. X  }
  1225. X  
  1226. X! STATIC_OVL void
  1227. X  setpaid(){    /* caller has checked that shopkeeper exists */
  1228. X          /* either we paid or left the shop or he just died */
  1229. X      register struct obj *obj;
  1230. X***************
  1231. X*** 97,103 ****
  1232. X      }
  1233. X  }
  1234. X  
  1235. X! static void
  1236. X  addupbill(){    /* delivers result in total */
  1237. X          /* caller has checked that shopkeeper exists */
  1238. X      register int ct = ESHK(shopkeeper)->billct;
  1239. X--- 109,115 ----
  1240. X      }
  1241. X  }
  1242. X  
  1243. X! STATIC_OVL void
  1244. X  addupbill(){    /* delivers result in total */
  1245. X          /* caller has checked that shopkeeper exists */
  1246. X      register int ct = ESHK(shopkeeper)->billct;
  1247. X***************
  1248. X*** 109,116 ****
  1249. X      }
  1250. X  }
  1251. X  
  1252. X  #endif /* OVLB */
  1253. X! #ifdef OVL2
  1254. X  
  1255. X  int
  1256. X  inshop() {
  1257. X--- 121,141 ----
  1258. X      }
  1259. X  }
  1260. X  
  1261. X+ STATIC_OVL boolean
  1262. X+ monstinroom(mdat,roomno)
  1263. X+ struct permonst *mdat;
  1264. X+ int roomno;
  1265. X+ {
  1266. X+     register struct monst *mtmp;
  1267. X+ 
  1268. X+     for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
  1269. X+         if(mtmp->data == mdat && inroom(mtmp->mx,mtmp->my) == roomno)
  1270. X+             return(TRUE);
  1271. X+     return(FALSE);
  1272. X+ }
  1273. X+ 
  1274. X  #endif /* OVLB */
  1275. X! #ifdef OVL1
  1276. X  
  1277. X  int
  1278. X  inshop() {
  1279. X***************
  1280. X*** 205,214 ****
  1281. X              break;
  1282. X  #ifdef ARMY
  1283. X          case BARRACKS:
  1284. X!             if(!((mons[PM_SOLDIER].geno & G_GENOD) &&
  1285. X!                  (mons[PM_SERGEANT].geno & G_GENOD) &&
  1286. X!                  (mons[PM_LIEUTENANT].geno & G_GENOD) &&
  1287. X!                  (mons[PM_CAPTAIN].geno & G_GENOD)))
  1288. X                  You("enter a military barracks!");
  1289. X              else You("enter an abandoned barracks.");
  1290. X              break;
  1291. X--- 230,239 ----
  1292. X              break;
  1293. X  #ifdef ARMY
  1294. X          case BARRACKS:
  1295. X!             if(monstinroom(&mons[PM_SOLDIER], roomno) ||
  1296. X!                 monstinroom(&mons[PM_SERGEANT], roomno) ||
  1297. X!                 monstinroom(&mons[PM_LIEUTENANT], roomno) ||
  1298. X!                 monstinroom(&mons[PM_CAPTAIN], roomno))
  1299. X                  You("enter a military barracks!");
  1300. X              else You("enter an abandoned barracks.");
  1301. X              break;
  1302. X***************
  1303. X*** 215,222 ****
  1304. X  #endif
  1305. X  #ifdef ORACLE
  1306. X          case DELPHI:
  1307. X!             if(!(mons[PM_ORACLE].geno & G_GENOD))
  1308. X!                 pline("\"Hello, %s, welcome to Delphi!\"", plname);
  1309. X              break;
  1310. X  #endif
  1311. X          default:
  1312. X--- 240,247 ----
  1313. X  #endif
  1314. X  #ifdef ORACLE
  1315. X          case DELPHI:
  1316. X!             if(monstinroom(&mons[PM_ORACLE], roomno))
  1317. X!                 pline("\"Hello, %s, welcome to Delphi!\"", plname);
  1318. X              break;
  1319. X  #endif
  1320. X          default:
  1321. X***************
  1322. X*** 294,300 ****
  1323. X      return (int)u.uinshop;
  1324. X  }
  1325. X  
  1326. X! #endif /* OVL2 */
  1327. X  #ifdef OVLB
  1328. X  
  1329. X  int
  1330. X--- 319,325 ----
  1331. X      return (int)u.uinshop;
  1332. X  }
  1333. X  
  1334. X! #endif /* OVL1 */
  1335. X  #ifdef OVLB
  1336. X  
  1337. X  int
  1338. X***************
  1339. X*** 305,310 ****
  1340. X--- 330,336 ----
  1341. X          ESHK(mtmp)->shoplevel == dlevel));
  1342. X  }
  1343. X  
  1344. X+ #ifdef SOUNDS
  1345. X  boolean
  1346. X  tended_shop(sroom)
  1347. X  struct mkroom *sroom;
  1348. X***************
  1349. X*** 316,323 ****
  1350. X          && inhishop(mtmp)) return(TRUE);
  1351. X      return(FALSE);
  1352. X  }
  1353. X  
  1354. X! static void
  1355. X  findshk(roomno)
  1356. X  register int roomno;
  1357. X  {
  1358. X--- 342,350 ----
  1359. X          && inhishop(mtmp)) return(TRUE);
  1360. X      return(FALSE);
  1361. X  }
  1362. X+ #endif
  1363. X  
  1364. X! STATIC_OVL void
  1365. X  findshk(roomno)
  1366. X  register int roomno;
  1367. X  {
  1368. X***************
  1369. X*** 671,677 ****
  1370. X  /* routine called after dying (or quitting) with nonempty bill or upset shk */
  1371. X  boolean
  1372. X  paybill(){
  1373. X!     register struct monst *mtmp;
  1374. X      register long loss = 0L;
  1375. X      register struct obj *otmp;
  1376. X      register xchar ox, oy;
  1377. X--- 698,704 ----
  1378. X  /* routine called after dying (or quitting) with nonempty bill or upset shk */
  1379. X  boolean
  1380. X  paybill(){
  1381. X!     register struct monst *mtmp, *mtmp2;
  1382. X      register long loss = 0L;
  1383. X      register struct obj *otmp;
  1384. X      register xchar ox, oy;
  1385. X***************
  1386. X*** 678,691 ****
  1387. X      register boolean take = FALSE;
  1388. X      register boolean taken = FALSE;
  1389. X  
  1390. X!     for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
  1391. X          if(mtmp->isshk) {
  1392. X          /* for bones: we don't want a shopless shk around */
  1393. X          if(ESHK(mtmp)->shoplevel != dlevel) mongone(mtmp);
  1394. X          else shopkeeper = mtmp;
  1395. X          }
  1396. X  
  1397. X!     if(!shopkeeper) return(FALSE);
  1398. X  
  1399. X      /* get one case out of the way: you die in the shop, the */
  1400. X      /* shopkeeper is peaceful, nothing stolen, nothing owed. */
  1401. X--- 705,720 ----
  1402. X      register boolean take = FALSE;
  1403. X      register boolean taken = FALSE;
  1404. X  
  1405. X!     for(mtmp = fmon; mtmp; mtmp = mtmp2) {
  1406. X!         mtmp2 = mtmp->nmon;
  1407. X          if(mtmp->isshk) {
  1408. X          /* for bones: we don't want a shopless shk around */
  1409. X          if(ESHK(mtmp)->shoplevel != dlevel) mongone(mtmp);
  1410. X          else shopkeeper = mtmp;
  1411. X          }
  1412. X+     }
  1413. X  
  1414. X!     if(!shopkeeper) goto clear;
  1415. X  
  1416. X      /* get one case out of the way: you die in the shop, the */
  1417. X      /* shopkeeper is peaceful, nothing stolen, nothing owed. */
  1418. X***************
  1419. X*** 709,716 ****
  1420. X  
  1421. X      if(ESHK(shopkeeper)->following || ANGRY(shopkeeper) || take) {
  1422. X          if((loss > u.ugold) || !loss) {
  1423. X!             pline("%s comes and takes all your possessions.",
  1424. X!                     Monnam(shopkeeper));
  1425. X              taken = TRUE;
  1426. X              shopkeeper->mgold += u.ugold;
  1427. X              u.ugold = 0L;
  1428. X--- 738,747 ----
  1429. X  
  1430. X      if(ESHK(shopkeeper)->following || ANGRY(shopkeeper) || take) {
  1431. X          if((loss > u.ugold) || !loss) {
  1432. X!             pline("%s %sand takes all your possessions.",
  1433. X!                 Monnam(shopkeeper), 
  1434. X!                 (shopkeeper->msleep || shopkeeper->mfrozen) ?
  1435. X!                 "wakes up " : "comes ");
  1436. X              taken = TRUE;
  1437. X              shopkeeper->mgold += u.ugold;
  1438. X              u.ugold = 0L;
  1439. X***************
  1440. X*** 745,752 ****
  1441. X          } else {
  1442. X              u.ugold -= loss;
  1443. X              shopkeeper->mgold += loss;
  1444. X!             pline("%s comes and takes %ld zorkmid%s %sowed %s.",
  1445. X                    Monnam(shopkeeper),
  1446. X                    loss,
  1447. X                    plur(loss),
  1448. X                    strncmp(ESHK(shopkeeper)->customer, plname, PL_NSIZ) ? "" : "you ",
  1449. X--- 776,785 ----
  1450. X          } else {
  1451. X              u.ugold -= loss;
  1452. X              shopkeeper->mgold += loss;
  1453. X!             pline("%s %sand takes %ld zorkmid%s %sowed %s.",
  1454. X                    Monnam(shopkeeper),
  1455. X+                   (shopkeeper->msleep || shopkeeper->mfrozen) ?
  1456. X+                     "wakes up " : "comes ",
  1457. X                    loss,
  1458. X                    plur(loss),
  1459. X                    strncmp(ESHK(shopkeeper)->customer, plname, PL_NSIZ) ? "" : "you ",
  1460. X***************
  1461. X*** 786,799 ****
  1462. X      return(obj);
  1463. X  }
  1464. X  
  1465. X! static long
  1466. X  get_cost(obj)
  1467. X  register struct obj *obj;
  1468. X  {
  1469. X!     register long tmp;
  1470. X  
  1471. X!     tmp = (long) getprice(obj);
  1472. X!     if (!tmp) tmp = 5L;
  1473. X      if (ANGRY(shopkeeper) || 
  1474. X          (pl_character[0] == 'T' && u.ulevel < (MAXULEV/2))
  1475. X  #ifdef SHIRT
  1476. X--- 819,832 ----
  1477. X      return(obj);
  1478. X  }
  1479. X  
  1480. X! static unsigned
  1481. X  get_cost(obj)
  1482. X  register struct obj *obj;
  1483. X  {
  1484. X!     register unsigned tmp;
  1485. X  
  1486. X!     tmp = getprice(obj);
  1487. X!     if (!tmp) tmp = 5;
  1488. X      if (ANGRY(shopkeeper) || 
  1489. X          (pl_character[0] == 'T' && u.ulevel < (MAXULEV/2))
  1490. X  #ifdef SHIRT
  1491. X***************
  1492. X*** 800,812 ****
  1493. X          || (uarmu && !uarm) /* wearing just a Hawaiian shirt */
  1494. X  #endif
  1495. X         )
  1496. X!         tmp += tmp/3L;
  1497. X!     if (ACURR(A_CHA) > 18)        tmp /= 2L;
  1498. X!     else if (ACURR(A_CHA) > 17)    tmp = (tmp * 2L)/3L;
  1499. X!     else if (ACURR(A_CHA) > 15)    tmp = (tmp * 3L)/4L;
  1500. X!     else if (ACURR(A_CHA) < 6)    tmp *= 2L;
  1501. X!     else if (ACURR(A_CHA) < 8)    tmp = (tmp * 3L)/2L;
  1502. X!     else if (ACURR(A_CHA) < 11)    tmp = (tmp * 4L)/3L;
  1503. X      if (!tmp) return 1;
  1504. X      return(tmp);
  1505. X  }
  1506. X--- 833,845 ----
  1507. X          || (uarmu && !uarm) /* wearing just a Hawaiian shirt */
  1508. X  #endif
  1509. X         )
  1510. X!         tmp += tmp/3;
  1511. X!     if (ACURR(A_CHA) > 18)        tmp /= 2;
  1512. X!     else if (ACURR(A_CHA) > 17)    tmp = (tmp * 2)/3;
  1513. X!     else if (ACURR(A_CHA) > 15)    tmp = (tmp * 3)/4;
  1514. X!     else if (ACURR(A_CHA) < 6)    tmp *= 2;
  1515. X!     else if (ACURR(A_CHA) < 8)    tmp = (tmp * 3)/2;
  1516. X!     else if (ACURR(A_CHA) < 11)    tmp = (tmp * 4)/3;
  1517. X      if (!tmp) return 1;
  1518. X      return(tmp);
  1519. X  }
  1520. X***************
  1521. X*** 840,849 ****
  1522. X      bp->bquan = obj->quan;
  1523. X      bp->useup = 0;
  1524. X      bp->price = get_cost(obj);
  1525. X!     Strcpy(buf, "\"For you, ");
  1526. X!     if (ANGRY(shopkeeper)) Strcat(buf, "scum ");
  1527. X!     else {
  1528. X!         switch(rnd(4)
  1529. X  #ifdef HARD
  1530. X             + u.udemigod
  1531. X  #endif
  1532. X--- 873,883 ----
  1533. X      bp->bquan = obj->quan;
  1534. X      bp->useup = 0;
  1535. X      bp->price = get_cost(obj);
  1536. X!     if(!shopkeeper->msleep && !shopkeeper->mfrozen) {
  1537. X!         Strcpy(buf, "\"For you, ");
  1538. X!         if (ANGRY(shopkeeper)) Strcat(buf, "scum ");
  1539. X!         else {
  1540. X!             switch(rnd(4)
  1541. X  #ifdef HARD
  1542. X             + u.udemigod
  1543. X  #endif
  1544. X***************
  1545. X*** 859,878 ****
  1546. X          case 5: if (u.ualigntyp == U_CHAOTIC) Strcat(buf, "un");
  1547. X              Strcat(buf, "holy");
  1548. X              break;
  1549. X!         }
  1550. X  #ifdef POLYSELF
  1551. X!         if(!is_human(uasmon)) Strcat(buf, " creature");
  1552. X!         else
  1553. X  #endif
  1554. X!         Strcat(buf, (flags.female) ? " lady" : " sir");
  1555. X!     }
  1556. X!     obj->dknown = 1; /* after all, the shk is telling you what it is */
  1557. X!     if(ininv) {
  1558. X          obj->quan = 1; /* fool xname() into giving singular */
  1559. X          pline("%s; only %d %s %s.\"", buf, bp->price,
  1560. X              (bp->bquan > 1) ? "per" : "for this", xname(obj));
  1561. X          obj->quan = bp->bquan;
  1562. X!     } else pline("The %s will cost you %d zorkmid%s%s.",
  1563. X              xname(obj), bp->price, plur((long)bp->price),
  1564. X              (bp->bquan > 1) ? " each" : "");
  1565. X      ESHK(shopkeeper)->billct++;
  1566. X--- 893,915 ----
  1567. X          case 5: if (u.ualigntyp == U_CHAOTIC) Strcat(buf, "un");
  1568. X              Strcat(buf, "holy");
  1569. X              break;
  1570. X!             }
  1571. X  #ifdef POLYSELF
  1572. X!             if(!is_human(uasmon)) Strcat(buf, " creature");
  1573. X!             else
  1574. X  #endif
  1575. X!             Strcat(buf, (flags.female) ? " lady" : " sir");
  1576. X!         }
  1577. X!         obj->dknown = 1; /* after all, the shk is telling you what it is */
  1578. X!         if(ininv) {
  1579. X          obj->quan = 1; /* fool xname() into giving singular */
  1580. X          pline("%s; only %d %s %s.\"", buf, bp->price,
  1581. X              (bp->bquan > 1) ? "per" : "for this", xname(obj));
  1582. X          obj->quan = bp->bquan;
  1583. X!         } else pline("The %s will cost you %d zorkmid%s%s.",
  1584. X!             xname(obj), bp->price, plur((long)bp->price),
  1585. X!             (bp->bquan > 1) ? " each" : "");
  1586. X!     } else pline("The list price of %s is %d zorkmid%s%s.",
  1587. X              xname(obj), bp->price, plur((long)bp->price),
  1588. X              (bp->bquan > 1) ? " each" : "");
  1589. X      ESHK(shopkeeper)->billct++;
  1590. X***************
  1591. X*** 911,922 ****
  1592. X      }
  1593. X  }
  1594. X  
  1595. X! static void
  1596. X  subfrombill(obj)
  1597. X  register struct obj *obj;
  1598. X  {
  1599. X      register struct bill_x *bp;
  1600. X  
  1601. X      if((bp = onbill(obj)) != 0) {
  1602. X          register struct obj *otmp;
  1603. X  
  1604. X--- 948,961 ----
  1605. X      }
  1606. X  }
  1607. X  
  1608. X! void
  1609. X  subfrombill(obj)
  1610. X  register struct obj *obj;
  1611. X  {
  1612. X      register struct bill_x *bp;
  1613. X  
  1614. X+     if(!shopkeeper) return;
  1615. X+ 
  1616. X      if((bp = onbill(obj)) != 0) {
  1617. X          register struct obj *otmp;
  1618. X  
  1619. X***************
  1620. X*** 1034,1040 ****
  1621. X          goto quit;
  1622. X          }
  1623. X          if(bp->useup || bp->bquan > obj->quan) {
  1624. X!         register int cnt, oquan, uquan;
  1625. X  
  1626. X          oquan = obj->quan;
  1627. X          uquan = (bp->useup ? bp->bquan : bp->bquan - oquan);
  1628. X--- 1073,1080 ----
  1629. X          goto quit;
  1630. X          }
  1631. X          if(bp->useup || bp->bquan > obj->quan) {
  1632. X!         register int cnt;
  1633. X!         register unsigned oquan, uquan;
  1634. X  
  1635. X          oquan = obj->quan;
  1636. X          uquan = (bp->useup ? bp->bquan : bp->bquan - oquan);
  1637. X***************
  1638. X*** 1308,1314 ****
  1639. X  }
  1640. X  
  1641. X  #ifdef KOPS
  1642. X! static int
  1643. X  makekops(mm)        /* returns the number of (all types of) Kops  made */
  1644. X  coord *mm;
  1645. X  {
  1646. X--- 1348,1354 ----
  1647. X  }
  1648. X  
  1649. X  #ifdef KOPS
  1650. X! STATIC_OVL int
  1651. X  makekops(mm)        /* returns the number of (all types of) Kops  made */
  1652. X  coord *mm;
  1653. X  {
  1654. X***************
  1655. X*** 1318,1337 ****
  1656. X      register int kcnt = (cnt / 9);        /* and maybe a kaptain */
  1657. X  
  1658. X      while(cnt--) {
  1659. X!         enexto(mm, mm->x, mm->y, &mons[PM_KEYSTONE_KOP]);
  1660. X!         (void) makemon(&mons[PM_KEYSTONE_KOP], mm->x, mm->y);
  1661. X      }
  1662. X      while(scnt--) {
  1663. X!         enexto(mm, mm->x, mm->y, &mons[PM_KOP_SERGEANT]);
  1664. X!         (void) makemon(&mons[PM_KOP_SERGEANT], mm->x, mm->y);
  1665. X      }
  1666. X      while(lcnt--) {
  1667. X!         enexto(mm, mm->x, mm->y, &mons[PM_KOP_LIEUTENANT]);
  1668. X!         (void) makemon(&mons[PM_KOP_LIEUTENANT], mm->x, mm->y);
  1669. X      }
  1670. X      while(kcnt--) {
  1671. X!         enexto(mm, mm->x, mm->y, &mons[PM_KOP_KAPTAIN]);
  1672. X!         (void) makemon(&mons[PM_KOP_KAPTAIN], mm->x, mm->y);
  1673. X      }
  1674. X      return(cnt + scnt + lcnt + kcnt);
  1675. X  }
  1676. X--- 1358,1377 ----
  1677. X      register int kcnt = (cnt / 9);        /* and maybe a kaptain */
  1678. X  
  1679. X      while(cnt--) {
  1680. X!         if (enexto(mm, mm->x, mm->y, &mons[PM_KEYSTONE_KOP]))
  1681. X!             (void) makemon(&mons[PM_KEYSTONE_KOP], mm->x, mm->y);
  1682. X      }
  1683. X      while(scnt--) {
  1684. X!         if (enexto(mm, mm->x, mm->y, &mons[PM_KOP_SERGEANT]))
  1685. X!             (void) makemon(&mons[PM_KOP_SERGEANT], mm->x, mm->y);
  1686. X      }
  1687. X      while(lcnt--) {
  1688. X!         if (enexto(mm, mm->x, mm->y, &mons[PM_KOP_LIEUTENANT]))
  1689. X!             (void) makemon(&mons[PM_KOP_LIEUTENANT], mm->x, mm->y);
  1690. X      }
  1691. X      while(kcnt--) {
  1692. X!         if (enexto(mm, mm->x, mm->y, &mons[PM_KOP_KAPTAIN]))
  1693. X!             (void) makemon(&mons[PM_KOP_KAPTAIN], mm->x, mm->y);
  1694. X      }
  1695. X      return(cnt + scnt + lcnt + kcnt);
  1696. X  }
  1697. X***************
  1698. X*** 1395,1401 ****
  1699. X          if(um_dist(shopkeeper->mx, shopkeeper->my, 1)) goto gethim;
  1700. X      } else {
  1701. X          /* if a !shopkeeper shows up at the door, move him */
  1702. X!         if(MON_AT(x, y) && (mtmp = m_at(x, y)) != shopkeeper) {
  1703. X          if(flags.soundok) {
  1704. X              You("hear an angry voice:");
  1705. X              verbalize("Out of my way, scum!");
  1706. X--- 1435,1441 ----
  1707. X          if(um_dist(shopkeeper->mx, shopkeeper->my, 1)) goto gethim;
  1708. X      } else {
  1709. X          /* if a !shopkeeper shows up at the door, move him */
  1710. X!         if((mtmp = m_at(x, y)) && mtmp != shopkeeper) {
  1711. X          if(flags.soundok) {
  1712. X              You("hear an angry voice:");
  1713. X              verbalize("Out of my way, scum!");
  1714. X***************
  1715. X*** 1490,1514 ****
  1716. X  }
  1717. X  #endif
  1718. X  
  1719. X! static long
  1720. X  cost_per_charge(otmp)
  1721. X  register struct obj *otmp;
  1722. X  {
  1723. X!     register long tmp = get_cost(otmp);
  1724. X  
  1725. X      /* The idea is to make the exhaustive use of */
  1726. X      /* an unpaid item more expensive than buying */
  1727. X      /* outright.                     */
  1728. X      if(otmp->otyp == MAGIC_LAMP) {             /* 1 */
  1729. X!         tmp += (tmp/3L);
  1730. X      } else if(otmp->otyp == MAGIC_MARKER) {       /* 70 - 100 */
  1731. X          /* no way to determine in advance   */
  1732. X          /* how many charges will be wasted. */
  1733. X          /* so, arbitrarily, one half of the */
  1734. X          /* price per use.            */
  1735. X!         tmp = (tmp/2L);
  1736. X      } else if(otmp->otyp == BAG_OF_TRICKS) {      /* 1 - 20 */
  1737. X!         tmp = (tmp/5L);
  1738. X      } else if(otmp->otyp == CRYSTAL_BALL ||       /* 1 - 5 */
  1739. X            otmp->otyp == LAMP ||                     /* 1-10 */
  1740. X  #ifdef MUSIC
  1741. X--- 1530,1554 ----
  1742. X  }
  1743. X  #endif
  1744. X  
  1745. X! static unsigned
  1746. X  cost_per_charge(otmp)
  1747. X  register struct obj *otmp;
  1748. X  {
  1749. X!     register unsigned tmp = get_cost(otmp);
  1750. X  
  1751. X      /* The idea is to make the exhaustive use of */
  1752. X      /* an unpaid item more expensive than buying */
  1753. X      /* outright.                     */
  1754. X      if(otmp->otyp == MAGIC_LAMP) {             /* 1 */
  1755. X!         tmp += (tmp/3);
  1756. X      } else if(otmp->otyp == MAGIC_MARKER) {       /* 70 - 100 */
  1757. X          /* no way to determine in advance   */
  1758. X          /* how many charges will be wasted. */
  1759. X          /* so, arbitrarily, one half of the */
  1760. X          /* price per use.            */
  1761. X!         tmp = (tmp/2);
  1762. X      } else if(otmp->otyp == BAG_OF_TRICKS) {      /* 1 - 20 */
  1763. X!         tmp = (tmp/5);
  1764. X      } else if(otmp->otyp == CRYSTAL_BALL ||       /* 1 - 5 */
  1765. X            otmp->otyp == LAMP ||                     /* 1-10 */
  1766. X  #ifdef MUSIC
  1767. X***************
  1768. X*** 1516,1524 ****
  1769. X            otmp->otyp <= DRUM_OF_EARTHQUAKE) ||      /* 5 - 9 */
  1770. X  #endif
  1771. X              otmp->olet == WAND_SYM) {         /* 3 - 11 */
  1772. X!         if(otmp->spe > 1) tmp = (tmp/4L);
  1773. X      }
  1774. X!     else return(0L);
  1775. X      return(tmp);
  1776. X  }
  1777. X  
  1778. X--- 1556,1564 ----
  1779. X            otmp->otyp <= DRUM_OF_EARTHQUAKE) ||      /* 5 - 9 */
  1780. X  #endif
  1781. X              otmp->olet == WAND_SYM) {         /* 3 - 11 */
  1782. X!         if(otmp->spe > 1) tmp = (tmp/4);
  1783. X      }
  1784. X!     else return(0);
  1785. X      return(tmp);
  1786. X  }
  1787. X  
  1788. X*** src/Old/shknam.c    Sun Jun  3 14:10:52 1990
  1789. X--- src/shknam.c    Thu May 31 22:13:42 1990
  1790. X***************
  1791. X*** 9,14 ****
  1792. X--- 9,18 ----
  1793. X  
  1794. X  #ifdef OVLB
  1795. X  
  1796. X+ static void FDECL(mkshobj_at, (const struct shclass *,int,int));
  1797. X+ static void FDECL(findname, (char *,const char **));
  1798. X+ static int  FDECL(shkinit, (const struct shclass *,struct mkroom *));
  1799. X+ 
  1800. X  static const char *shkliquors[] = {
  1801. X      /* Ukraine */
  1802. X      "Njezjin", "Tsjernigof", "Gomel", "Ossipewsk", "Gorlowka",
  1803. X***************
  1804. X*** 102,108 ****
  1805. X      "Sperc", "Noskcirdneh", "Yawolloh", "Hyeghu", "Niskal", "Trahnil",
  1806. X      "Htargcm", "Enrobwem", "Kachzi Rellim", "Regien", "Donmyar",
  1807. X      "Yelpur", "Nosnehpets", "Stewe", "Renrut", "Zlaw", "Nosalnef",
  1808. X!     "Rewuorb", "Rellenk",
  1809. X      ""
  1810. X  };
  1811. X  
  1812. X--- 106,125 ----
  1813. X      "Sperc", "Noskcirdneh", "Yawolloh", "Hyeghu", "Niskal", "Trahnil",
  1814. X      "Htargcm", "Enrobwem", "Kachzi Rellim", "Regien", "Donmyar",
  1815. X      "Yelpur", "Nosnehpets", "Stewe", "Renrut", "Zlaw", "Nosalnef",
  1816. X!     "Rewuorb", "Rellenk", "Yad", "Cire Htims", "Y-crad", "Nenilukah", 
  1817. X! #ifdef OVERLAY
  1818. X!     "Erreip", "Nehpets", "Mron", "Snivek",
  1819. X! #endif
  1820. X! #ifdef MAC
  1821. X!     "Nhoj-lee", "Evad\'kh", "Ettaw-noj", "Tsew-mot", "Ydna-s",
  1822. X! #endif
  1823. X! #ifdef AMIGA
  1824. X!     "Falo", "Nosid-da\'r", "Ekim-p", "Rebrol-nek", "Noslo", "Yl-rednow",
  1825. X!     "Mured-oog",
  1826. X! #endif
  1827. X! #ifdef VMS
  1828. X!     "Lez-tneg", "Ytnu-haled", "Niknar",
  1829. X! #endif
  1830. X      ""
  1831. X  };
  1832. X  
  1833. X***************
  1834. X*** 183,189 ****
  1835. X  static void
  1836. X  mkshobj_at(shp, sx, sy)
  1837. X  /* make an object of the appropriate type for a shop square */
  1838. X! struct shclass *shp;
  1839. X  int sx, sy;
  1840. X  {
  1841. X      register struct monst *mtmp;
  1842. X--- 200,206 ----
  1843. X  static void
  1844. X  mkshobj_at(shp, sx, sy)
  1845. X  /* make an object of the appropriate type for a shop square */
  1846. X! const struct shclass *shp;
  1847. X  int sx, sy;
  1848. X  {
  1849. X      register struct monst *mtmp;
  1850. X***************
  1851. X*** 200,206 ****
  1852. X          }
  1853. X      } else if ((atype = get_shop_item(shp - shtypes)) < 0)
  1854. X          (void) mksobj_at(-atype, sx, sy);
  1855. X!     else (void) mkobj_at(atype, sx, sy);
  1856. X  }
  1857. X  
  1858. X  static void
  1859. X--- 217,223 ----
  1860. X          }
  1861. X      } else if ((atype = get_shop_item(shp - shtypes)) < 0)
  1862. X          (void) mksobj_at(-atype, sx, sy);
  1863. X!     else (void) mkobj_at(atype, sx, sy, TRUE);
  1864. X  }
  1865. X  
  1866. X  static void
  1867. X***************
  1868. X*** 207,213 ****
  1869. X  findname(nampt, nlp)
  1870. X  /* extract a shopkeeper name for the given shop type */
  1871. X      char *nampt;
  1872. X!     char *nlp[];
  1873. X  {
  1874. X      register int i;
  1875. X  
  1876. X--- 224,230 ----
  1877. X  findname(nampt, nlp)
  1878. X  /* extract a shopkeeper name for the given shop type */
  1879. X      char *nampt;
  1880. X!     const char *nlp[];
  1881. X  {
  1882. X      register int i;
  1883. X  
  1884. X***************
  1885. X*** 214,220 ****
  1886. X      for(i = 0; i < dlevel; i++)
  1887. X      if (strlen(nlp[i]) == 0) {
  1888. X          /* Not enough names, try general name */
  1889. X!         if (nlp != (char **)shkgeneral)
  1890. X          findname(nampt, shkgeneral);
  1891. X          else
  1892. X          Strcpy(nampt, "Dirk");
  1893. X--- 231,237 ----
  1894. X      for(i = 0; i < dlevel; i++)
  1895. X      if (strlen(nlp[i]) == 0) {
  1896. X          /* Not enough names, try general name */
  1897. X!         if (nlp != shkgeneral)
  1898. X          findname(nampt, shkgeneral);
  1899. X          else
  1900. X          Strcpy(nampt, "Dirk");
  1901. X***************
  1902. X*** 226,232 ****
  1903. X  
  1904. X  static int
  1905. X  shkinit(shp, sroom)    /* create a new shopkeeper in the given room */
  1906. X! struct shclass    *shp;
  1907. X  struct mkroom    *sroom;
  1908. X  {
  1909. X      register int sh, sx, sy;
  1910. X--- 243,249 ----
  1911. X  
  1912. X  static int
  1913. X  shkinit(shp, sroom)    /* create a new shopkeeper in the given room */
  1914. X! const struct shclass    *shp;
  1915. X  struct mkroom    *sroom;
  1916. X  {
  1917. X      register int sh, sx, sy;
  1918. X***************
  1919. X*** 285,291 ****
  1920. X      ESHK(shk)->billct = 0;
  1921. X      shk->mgold = 1000L + 30L*(long)rnd(100);    /* initial capital */
  1922. X      if (shp->shknms == (char **)shktools) {
  1923. X!         static int who;
  1924. X          who = rn2(sizeof(shktools)/sizeof(char *) - 1);
  1925. X          if (who==21) ESHK(shk)->ismale = FALSE;
  1926. X          else ESHK(shk)->ismale = TRUE;
  1927. X--- 302,308 ----
  1928. X      ESHK(shk)->billct = 0;
  1929. X      shk->mgold = 1000L + 30L*(long)rnd(100);    /* initial capital */
  1930. X      if (shp->shknms == (char **)shktools) {
  1931. X!         static int NEARDATA who;
  1932. X          who = rn2(sizeof(shktools)/sizeof(char *) - 1);
  1933. X          if (who==21) ESHK(shk)->ismale = FALSE;
  1934. X          else ESHK(shk)->ismale = TRUE;
  1935. X***************
  1936. X*** 293,299 ****
  1937. X          ESHK(shk)->shknam[PL_NSIZ-1] = 0;
  1938. X      } else {
  1939. X          ESHK(shk)->ismale = dlevel%2;
  1940. X!         findname(ESHK(shk)->shknam, shp->shknms);
  1941. X      }
  1942. X  
  1943. X      return(sh);
  1944. X--- 310,316 ----
  1945. X          ESHK(shk)->shknam[PL_NSIZ-1] = 0;
  1946. X      } else {
  1947. X          ESHK(shk)->ismale = dlevel%2;
  1948. X!         findname(ESHK(shk)->shknam, (const char **)shp->shknms);
  1949. X      }
  1950. X  
  1951. X      return(sh);
  1952. X***************
  1953. X*** 325,330 ****
  1954. X--- 342,351 ----
  1955. X  
  1956. X      if(levl[sx][sy].doormask == D_NODOOR) {
  1957. X          levl[sx][sy].doormask = D_ISOPEN;
  1958. X+         mnewsym(sx,sy);
  1959. X+     }
  1960. X+     if(levl[sx][sy].typ == SDOOR) {
  1961. X+         levl[sx][sy].typ = DOOR;
  1962. X          mnewsym(sx,sy);
  1963. X      }
  1964. X      if(levl[sx][sy].doormask & D_TRAPPED) {    
  1965. X*** src/Old/sit.c    Sun Jun  3 14:11:17 1990
  1966. X--- src/sit.c    Fri Apr 13 17:52:16 1990
  1967. X***************
  1968. X*** 161,168 ****
  1969. X      }
  1970. X  
  1971. X      for (otmp = invent; otmp; otmp = otmp->nobj)  nobj++;
  1972. X-         if (nobj) for (cnt = rnd(6/((!!Antimagic) + 1)); cnt > 0; cnt--)  {
  1973. X  
  1974. X          onum = rn2(nobj);
  1975. X          for(otmp = invent; onum != 0; onum--)
  1976. X              otmp = otmp->nobj;
  1977. X--- 161,169 ----
  1978. X      }
  1979. X  
  1980. X      for (otmp = invent; otmp; otmp = otmp->nobj)  nobj++;
  1981. X  
  1982. X+     if (nobj)
  1983. X+         for (cnt = rnd(6/((!!Antimagic) + 1)); cnt > 0; cnt--)  {
  1984. X          onum = rn2(nobj);
  1985. X          for(otmp = invent; onum != 0; onum--)
  1986. X              otmp = otmp->nobj;
  1987. X*** src/Old/sounds.c    Sun Jun  3 14:11:33 1990
  1988. X--- src/sounds.c    Thu May 31 22:13:45 1990
  1989. X***************
  1990. X*** 8,17 ****
  1991. X  #include "hack.h"
  1992. X  #include "edog.h"
  1993. X  
  1994. X- static int FDECL(domonnoise,(struct monst *));
  1995. X- 
  1996. X  #ifdef OVLB
  1997. X  
  1998. X  void
  1999. X  verbalize(str)
  2000. X  register const char *str;
  2001. X--- 8,17 ----
  2002. X  #include "hack.h"
  2003. X  #include "edog.h"
  2004. X  
  2005. X  #ifdef OVLB
  2006. X  
  2007. X+ static int FDECL(domonnoise,(struct monst *));
  2008. X+ 
  2009. X  void
  2010. X  verbalize(str)
  2011. X  register const char *str;
  2012. X***************
  2013. X*** 107,113 ****
  2014. X              You("hear the tones of courtly conversation.");
  2015. X              break;
  2016. X              case 1:
  2017. X!             You("hear a sceptre being pounded in judgement.");
  2018. X              break;
  2019. X              case 2:
  2020. X              pline("Someone just shouted \"Off with %s head!\"",
  2021. X--- 107,113 ----
  2022. X              You("hear the tones of courtly conversation.");
  2023. X              break;
  2024. X              case 1:
  2025. X!             You("hear a sceptre being pounded in judgment.");
  2026. X              break;
  2027. X              case 2:
  2028. X              pline("Someone just shouted \"Off with %s head!\"",
  2029. X*** src/Old/sp_lev.c    Sun Jun  3 14:11:57 1990
  2030. X--- src/sp_lev.c    Sat May 12 16:07:17 1990
  2031. X***************
  2032. X*** 26,32 ****
  2033. X  #define TOP    1
  2034. X  #define BOTTOM    3
  2035. X  
  2036. X! static walk walklist[50];
  2037. X  extern int x_maze_max, y_maze_max;
  2038. X  
  2039. X  #ifdef MACOS
  2040. X--- 26,32 ----
  2041. X  #define TOP    1
  2042. X  #define BOTTOM    3
  2043. X  
  2044. X! static walk NEARDATA walklist[50];
  2045. X  extern int x_maze_max, y_maze_max;
  2046. X  
  2047. X  #ifdef MACOS
  2048. X***************
  2049. X*** 36,43 ****
  2050. X  #endif
  2051. X  static char robjects[10], rloc_x[10], rloc_y[10], rmonst[10],
  2052. X      ralign[3] = { A_CHAOS, A_NEUTRAL, A_LAW };
  2053. X! static xchar xstart, ystart, xsize, ysize;
  2054. X  
  2055. X  /*
  2056. X   * Make walls of the area (x1, y1, x2, y2) non diggable
  2057. X   */
  2058. X--- 36,53 ----
  2059. X  #endif
  2060. X  static char robjects[10], rloc_x[10], rloc_y[10], rmonst[10],
  2061. X      ralign[3] = { A_CHAOS, A_NEUTRAL, A_LAW };
  2062. X! static xchar NEARDATA xstart, NEARDATA ystart, NEARDATA xsize, NEARDATA ysize;
  2063. X  
  2064. X+ static void FDECL(make_walls_nondiggable, (XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P));
  2065. X+ static int NDECL(rnddoor);
  2066. X+ static int NDECL(rndtrap);
  2067. X+ static void FDECL(get_location, (schar *,schar *));
  2068. X+ static void FDECL(shuffle, (char *,XCHAR_P));
  2069. X+ static void FDECL(shuffle2, (char *,char *,XCHAR_P));
  2070. X+ static boolean FDECL(load_rooms, (FILE *));
  2071. X+ static void FDECL(maze1xy, (coord *));
  2072. X+ static boolean FDECL(load_maze, (FILE *));
  2073. X+ 
  2074. X  /*
  2075. X   * Make walls of the area (x1, y1, x2, y2) non diggable
  2076. X   */
  2077. X***************
  2078. X*** 406,416 ****
  2079. X              c = 0;
  2080. X  
  2081. X          if (!c)
  2082. X!             (void) mkobj_at(0, x, y);
  2083. X          else if (tmpobj.id != -1)
  2084. X              (void) mksobj_at(tmpobj.id, x, y);
  2085. X          else
  2086. X!             (void) mkobj_at(c, x, y);
  2087. X      }
  2088. X  
  2089. X      n = fgetc(fd); /* Number of drawbridges */
  2090. X--- 416,426 ----
  2091. X              c = 0;
  2092. X  
  2093. X          if (!c)
  2094. X!             (void) mkobj_at(0, x, y, TRUE);
  2095. X          else if (tmpobj.id != -1)
  2096. X              (void) mksobj_at(tmpobj.id, x, y);
  2097. X          else
  2098. X!             (void) mkobj_at(c, x, y, TRUE);
  2099. X      }
  2100. X  
  2101. X      n = fgetc(fd); /* Number of drawbridges */
  2102. X***************
  2103. X*** 540,546 ****
  2104. X          mapfact = (int) ((mapcount * 100L) / mapcountmax);
  2105. X          for(x = rnd((int) (20 * mapfact) / 100); x; x--) {
  2106. X              maze1xy(&mm);
  2107. X!             (void) mkobj_at(rn2(2) ? GEM_SYM : 0, mm.x, mm.y);
  2108. X          }
  2109. X          for(x = rnd((int) (12 * mapfact) / 100); x; x--) {
  2110. X              maze1xy(&mm);
  2111. X--- 550,556 ----
  2112. X          mapfact = (int) ((mapcount * 100L) / mapcountmax);
  2113. X          for(x = rnd((int) (20 * mapfact) / 100); x; x--) {
  2114. X              maze1xy(&mm);
  2115. X!             (void) mkobj_at(rn2(2) ? GEM_SYM : 0, mm.x, mm.y, TRUE);
  2116. X          }
  2117. X          for(x = rnd((int) (12 * mapfact) / 100); x; x--) {
  2118. X              maze1xy(&mm);
  2119. X
  2120. END_OF_FILE
  2121. if test 52827 -ne `wc -c <'patch8.07'`; then
  2122.     echo shar: \"'patch8.07'\" unpacked with wrong size!
  2123. fi
  2124. # end of 'patch8.07'
  2125. fi
  2126. echo shar: End of archive 6 \(of 24\).
  2127. cp /dev/null ark6isdone
  2128. MISSING=""
  2129. 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
  2130.     if test ! -f ark${I}isdone ; then
  2131.     MISSING="${MISSING} ${I}"
  2132.     fi
  2133. done
  2134. if test "${MISSING}" = "" ; then
  2135.     echo You have unpacked all 24 archives.
  2136.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2137. else
  2138.     echo You still need to unpack the following archives:
  2139.     echo "        " ${MISSING}
  2140. fi
  2141. ##  End of shell archive.
  2142. exit 0
  2143.