home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume17 / dinkum3 / part05 < prev    next >
Encoding:
Internet Message Format  |  1993-03-20  |  51.3 KB

  1. Path: uunet!paladin.american.edu!howland.reston.ans.net!zaphod.mps.ohio-state.edu!uwm.edu!ogicse!news.tek.com!master!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v17i010:  dinkum3 - australian text adventure game, V2.12, Part05/07
  5. Message-ID: <4521@master.CNA.TEK.COM>
  6. Date: 9 Feb 93 20:02:35 GMT
  7. Article-I.D.: master.4521
  8. Sender: news@master.CNA.TEK.COM
  9. Lines: 1592
  10. Approved: billr@saab.CNA.TEK.COM
  11. Xref: uunet comp.sources.games:1689
  12.  
  13. Submitted-by: Gary Allen <gary@sun.mech.uq.oz.au>
  14. Posting-number: Volume 17, Issue 10
  15. Archive-name: dinkum3/Part05
  16. Supersedes: dinkum2: Volume 15, Issue 36-43
  17. Environment: Unix, DOS
  18.  
  19.  
  20.  
  21. #! /bin/sh
  22. # This is a shell archive.  Remove anything before this line, then unpack
  23. # it by saving it into a file and typing "sh file".  To overwrite existing
  24. # files, type "sh file -c".  You can also feed this as standard input via
  25. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  26. # will see the following message at the end:
  27. #        "End of archive 5 (of 7)."
  28. # Contents:  actor.c monster.c
  29. # Wrapped by billr@saab on Mon Feb  8 13:40:51 1993
  30. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  31. if test -f 'actor.c' -a "${1}" != "-c" ; then 
  32.   echo shar: Will not clobber existing file \"'actor.c'\"
  33. else
  34. echo shar: Extracting \"'actor.c'\" \(19048 characters\)
  35. sed "s/^X//" >'actor.c' <<'END_OF_FILE'
  36. X#define ACTOR
  37. X#include "dink_sym.h"
  38. X#include "dink_glb.h"
  39. X#if (PROTOTYPE)
  40. Xvoid actor(int n)
  41. X#else
  42. Xvoid actor(n)
  43. Xint n ;
  44. X#endif
  45. X/********************************************************************/
  46. X/*                                                                  */
  47. X/* Software by Gary A. Allen, Jr. 12 December 1992, Version: Mk 1.3 */
  48. X/*           (c) Copyright 1992 by Gary A. Allen, Jr.               */
  49. X/*                                                                  */
  50. X/********************************************************************/
  51. X{
  52. Xregister int i, j ;
  53. Xint sw_found ;
  54. Xstatic int sw_door_kick = FALSE ;
  55. X
  56. XOBJECT_STRUCT *pnt, *point ;
  57. X
  58. X#if (PROTOTYPE)
  59. Xvoid objector(OBJECT_STRUCT*) ;
  60. X#endif
  61. X
  62. Xswitch(n) {
  63. X
  64. X/* mine elevator */
  65. Xcase R_lift_entr:
  66. X    switch(Lift_door->Status) {
  67. X    case S_closed:
  68. X        printf("The lift doors are closed and the lift call button ");
  69. X        printf("is not glowing. It \nseems the electrical power has ");
  70. X        printf("been turned off at the main switch. \n");
  71. X        break ;
  72. X        
  73. X    case S_flashing:
  74. X        printf("The lift doors are closed.  However the call button");
  75. X        printf(" is flashing. There \n") ;
  76. X        printf("is the sound of electrical equipment ");
  77. X        printf("humming within the mine lift. \n");
  78. X        break ;
  79. X        
  80. X        case S_open:
  81. X        printf("The lift doors are standing open. \n");
  82. X        break ;
  83. X    }
  84. X    break;
  85. X/* office building door */
  86. Xcase R_office_entr:
  87. X    switch(Door->Status) {
  88. X    case S_open:
  89. X        printf("      --- The office front door is open. --- \n");
  90. X        break;
  91. X
  92. X    case S_kicked:
  93. X        if (!sw_door_kick) {
  94. Xprintf("The lock of the front door has been shot at several times.\n"); 
  95. Xprintf("The door itself has been kicked in and is broken off at\n") ;
  96. Xprintf("the hinges.  The passage way is free to enter.\n");
  97. X            sw_door_kick = TRUE ;
  98. X        }
  99. X        else {
  100. Xprintf("The front door of the office has been kicked in. \n") ;
  101. X        }
  102. X        break ;
  103. X
  104. X    default:
  105. Xprintf("The office has a front door with a sun faded sign \n"); 
  106. Xprintf("upon which is written:  \"Sorry, We are CLOSED\". \n");
  107. Xprintf("      --- The office door is shut. --- \n");
  108. X        break ;
  109. X    }
  110. X    break ;
  111. X/* Site Managers Office */
  112. Xcase R_office_mang:
  113. X    if (Picture->Status == S_closed) {
  114. Xprintf("On the wall is a picture of a platypus wearing a hat with");
  115. X        printf(" corks \ndangling from the hat's rim.\n");
  116. X        break;
  117. X    }
  118. X    if ((Safe->Status != S_open)&&(Picture->Status == S_open)) {
  119. Xprintf("Before you is a picture hinged to the wall that has been ");
  120. Xprintf("swung \nopen revealing a closed combination dial wall safe.\n");
  121. X        break;
  122. X    }
  123. X    if ((Safe->Status == S_open)&&(Picture->Status == S_open)) {
  124. Xprintf("Before you is a picture hinged to the wall that has been");
  125. Xprintf(" swung \nout revealing a wall safe with an open door.\n");
  126. X        sw_found = FALSE ;
  127. X        pnt = object ;
  128. X        for (i = 0; i < Objcnt; i++) {
  129. X            if (pnt->Location == B_in_safe) {
  130. X                sw_found = TRUE ;
  131. Xprintf ("You see the following inside the safe: \n");
  132. X                point = object ;
  133. X                for (j = 0; j < Objcnt; j++) {
  134. X                    if (point->Location == B_in_safe) {
  135. X                        printf ("        ");
  136. X                        objector(point) ;
  137. X                        printf("\n") ;
  138. X                    }
  139. X                    point++ ;
  140. X                }                
  141. X                if (gleep_safe != 0) {
  142. X                    printf ("        ");
  143. X                    if (gleep_safe == 1) 
  144. X                        printf("one gleep\n") ;
  145. X                    else printf("%d gleeps\n",gleep_safe) ;
  146. X                }
  147. X                break;
  148. X            }
  149. X            pnt++ ;
  150. X        }
  151. X        if (sw_found) break ;
  152. X        if (gleep_safe != 0) {
  153. Xprintf("There is nothing in the safe except ") ;
  154. X            if (gleep_safe == 1) 
  155. X                printf("a single gleep.\n") ;
  156. X            else
  157. X                printf("%d gleeps.\n",gleep_safe) ;
  158. X            break ;
  159. X        }
  160. X        printf("---The safe is empty.--- \n");
  161. X        break ;
  162. X    } /* end of the "safe open" block */
  163. X
  164. X/* store room */
  165. Xcase R_store_room:
  166. X    printf("There is a 1500 Volt circuit breaker box on the wall");
  167. X    if (Circuit_breaker->Status) 
  168. Xprintf(" which has \na switch set in the \"on\" position. \n"); 
  169. X    else
  170. Xprintf(" which has \na switch set in the \"off\" position. \n"); 
  171. X    break;
  172. X
  173. X/* lift compartment */
  174. Xcase R_lift_inside:
  175. X    printf("The level button with the number "); 
  176. X    switch(Lift->Status) {
  177. X        case L0:
  178. X            printf("zero"); 
  179. X            break ;
  180. X        case L49:
  181. X            printf("forty-nine"); 
  182. X            break ;
  183. X        case L67:
  184. X            printf("sixty-seven");
  185. X            break ;
  186. X        case L82:
  187. X            printf("eighty-two"); 
  188. X            break ;
  189. X    } /* end of the Lift->Status "switch" block */
  190. X    printf(" is flashing. \n"); 
  191. X    break;
  192. X
  193. X} /* end of the "switch" block */ 
  194. X} /* --- end of subroutine "actor"--- */
  195. X
  196. X#if (PROTOTYPE)
  197. Xvoid objector(OBJECT_STRUCT *pnt)
  198. X#else
  199. Xvoid objector(pnt)
  200. XOBJECT_STRUCT *pnt ;
  201. X#endif
  202. X{
  203. X/* Deal with transformed objects */
  204. Xif (pnt->Type == Z_alias) {
  205. X    if (pnt->ID == V_rifle) {
  206. Xprintf("an M16 infantry rifle with an ammunition clip inserted") ;
  207. X        return ;
  208. X    }
  209. X    if (pnt->ID == V_dynamite) {
  210. Xprintf("a large stick of dynamite with a fuse type blasting cap") ;
  211. X        return ;
  212. X    }
  213. X}
  214. Xelse printf("%s",pnt->Text) ;
  215. X} /* --- end of subroutine "objector"--- */
  216. X#if (PROTOTYPE)
  217. Xvoid killer(int n)
  218. X#else
  219. Xvoid killer(n)
  220. Xint n ;
  221. X#endif
  222. X/********************************************************************/
  223. X/*                                                                  */
  224. X/*  This subroutine had a serious error in it which was discovered  */
  225. X/*  by Byron Rakitzis.   Thanks, Byron!                             */
  226. X/*                                                                  */
  227. X/*  Software by Gary A. Allen, Jr. 19 January 1992  Version: Mk 1.4 */
  228. X/*           (c) Copyright 1993 by Gary A. Allen, Jr.               */
  229. X/*                                                                  */
  230. X/********************************************************************/
  231. X{
  232. Xregister int j ;
  233. X
  234. Xint hits ;
  235. Xint sw_other_object ;
  236. Xstatic int sw_hurt = FALSE ;
  237. X
  238. XMONSTER_STRUCT *mnstr ; 
  239. XOBJECT_STRUCT *pnt ; 
  240. X
  241. X#if (PROTOTYPE)
  242. Xvoid boom(void), ender(int), gleeper(int), the_fork(void) ;
  243. Xint shoot_it(void) ;
  244. X
  245. X#else
  246. X/* Function prototype for K&R-C */
  247. Xint shoot_it() ;
  248. X#endif
  249. X
  250. X/* Insult the user if he asks for suicide */
  251. Xif (tag[V_self]) {
  252. X    the_fork() ;
  253. X    return ;
  254. X}
  255. X
  256. X/* Deal with the wrong sorts of "kill" commands */
  257. Xif (verb == V_kill) {
  258. X    /* Verb "kill" only */
  259. X    if (tag[V_VERB_ONLY]) {
  260. Xprintf("It may be obvious to you, but you are going to have to tell\n");
  261. Xprintf("me exactly what it is you want to have killed, and \n") ;
  262. Xprintf("with what sort of weapon. \n") ;
  263. X        return;
  264. X    }
  265. X
  266. X    if (!tag[V_rifle]) {
  267. X        if (tag[V_dynamite]) {
  268. X            if (Dynamite->Location == B_have) {
  269. Xprintf("You'll find the dynamite is not all that formidable of a weapon.\n") ;
  270. Xprintf("Try lighting some with a match and you'll see why.\n") ;
  271. X            }
  272. X            else 
  273. Xprintf("You silly gallah! You don't have any dynamite in your possession!\n") ;
  274. X        }
  275. X        else printf("What weapon am I suppose to use? \n") ;
  276. X        return ;
  277. X    }
  278. X}
  279. X
  280. Xsw_other_object = FALSE ;
  281. X/* shoot Ned Kely */
  282. Xif (tag[V_ned]) {
  283. X    if (Ned->Location == B_destroyed) {
  284. Xprintf("Forget it, you drongo!! Ned Kelly is already dead!\n") ;
  285. X        return ;
  286. X    }
  287. X    if (Ned->Status == F_asleep) {
  288. Xprintf("There is no Ned Kelly here for me to kill! \n") ;
  289. X        return ;
  290. X    }
  291. X
  292. X    /* Fire the rifle */
  293. X    if ((hits = shoot_it()) == 0) return  ;
  294. X
  295. Xprintf("Ned Kelly keels over dead.  His body suddenly glows a bright ");
  296. Xprintf("orange like it\nis being consummed by a heatless flame ");
  297. Xprintf("and then the late Ned Kelly disappears\ninto a puff of ") ;
  298. Xprintf("blue smoke. \n\n") ;
  299. Xprintf("By the way, the recently deceased bushranger ***was*** ");
  300. Xprintf("wearing iron body\narmour.  However thin sheets of iron ");
  301. Xprintf("would just barely work against nineteenth\ncentury firearms ");
  302. Xprintf("at long range.  Against a modern infantry rifle, Ned's\n");
  303. Xprintf("armour offered about as much protection as a dunny paper ");
  304. Xprintf("bandage. \n") ;
  305. X    Ned->Location = B_destroyed ;
  306. X    Ned->Status = F_asleep ;
  307. X    monster_flag = F_no_monster ;
  308. X    room[R_hideout][M_monster] = 0 ;
  309. X    
  310. X    /* create Ned Kelly's silver teapot */
  311. X    ++room[R_hideout][M_obj_cnt] ;
  312. X    Teapot->Location = R_hideout ;
  313. X    return ;
  314. X} /* end of the Ned Kelly block */
  315. X
  316. X/* shoot the drop bear */
  317. Xif (tag[V_bear]) {
  318. X    for (j = 2; j <= 5; j++) {
  319. X        mnstr = (monster_start + j) ;  /* point to the monster */
  320. X        if (mnstr->Status != F_asleep) break ;
  321. X    }
  322. X    if (j > 5) {
  323. X        printf("I see no drop bear for me to kill! \n") ;
  324. X        return ;
  325. X    }
  326. X
  327. X    /* Fire the rifle */
  328. X    if ((hits = shoot_it()) == 0) return  ;
  329. X
  330. X    /* Toggle the hurt switch if this is the first hit */
  331. X    if (mnstr->Hits == 0)  sw_hurt = FALSE ;
  332. X    mnstr->Hits += hits ;
  333. X
  334. X    if (mnstr->Hits < 30) {
  335. X        /* Bear freaks out from being shot too much */
  336. X        if (sw_hurt && (mnstr->Hits >= 10)) {
  337. Xprintf("The drop bear has been shot at so many times, that it ");
  338. Xprintf("has gone mad\n") ;
  339. Xprintf("with rage.  It leaps three metres and rips out your ") ;
  340. Xprintf("throat with a\n");
  341. Xprintf("single swish of its claws.  You die instantly. \n") ;
  342. X            ender(F_died) ;
  343. X        }
  344. X
  345. X        if (mnstr->Hits == 1) {
  346. Xprintf("Your bullet hit the drop bear causing it to howl in ");
  347. Xprintf("anguish.  However drop\n");
  348. Xprintf("bears are pretty tough and just one bullet isn't ");
  349. Xprintf("going to kill it.\n") ;
  350. X        }
  351. X        else {
  352. X            if (!sw_hurt) {
  353. Xprintf("You've hit the drop bear and it is bleeding fairly ");
  354. Xprintf("heavily.\n");
  355. Xprintf("Unfortunately it is still alive and kicking and wants ") ;
  356. Xprintf("your blood \n");
  357. Xprintf("in payment for its.\n") ;
  358. X                sw_hurt = TRUE ;
  359. X            }
  360. X            else {
  361. Xprintf("You've hit the drop bear again.  It is weakening but still ");
  362. Xprintf("alive.\n");
  363. X            }
  364. X        }
  365. X        monster_flag = F_wounded ;
  366. X        return ;
  367. X    }
  368. X
  369. X    if (rifle_flag == F_single) {
  370. Xprintf("That last bullet was the straw which broke the drop ") ;
  371. Xprintf("bear's back.\n") ;
  372. Xprintf("The blasted thing is finally dead! \n") ;
  373. X    }
  374. X    else {
  375. Xprintf("The bullets riddled the drop bear with holes, killing it ") ;
  376. Xprintf("instantly.\n") ; 
  377. X    }
  378. Xprintf("Suddenly the drop bear's corpse turns into a cloud of greasy ");
  379. Xprintf("blue smoke,\n") ;
  380. Xprintf("which floats away without a trace.\n") ;
  381. X    sw_hurt = FALSE ;
  382. X    mnstr->Location = B_destroyed ;
  383. X    mnstr->Status = F_asleep ;
  384. X    monster_flag = F_no_monster ;
  385. X    room[n][M_monster] = 0 ;
  386. X    return ;
  387. X} /* end of the drop bear block */
  388. X
  389. X/* shoot the mutant wombat */
  390. Xif (tag[V_wombat]) {
  391. X    if (Wombat->Status == F_asleep) {
  392. X        printf("I see no wombat for me to kill!\n");
  393. X        return ;
  394. X    }
  395. X
  396. X    /* Fire the rifle */
  397. X    if ((hits = shoot_it()) == 0) return  ;
  398. X
  399. X    /* Toggle the hurt switch if this is the first hit */
  400. X    if (Wombat->Hits == 0)  sw_hurt = FALSE ;
  401. X    Wombat->Hits += hits ;
  402. X
  403. X    if (Wombat->Hits < 300) {
  404. X        if (Wombat->Hits == 1) {
  405. Xprintf("Your bullet hit the wombat causing it some minor discomfort.");
  406. Xprintf("  Judging from its \n");
  407. Xprintf("behavior, killing this beast is going to be tough! \n") ;
  408. X        }
  409. X        else {
  410. X            if (!sw_hurt) {
  411. Xprintf("You've hit the wombat and got its attention ") ;
  412. Xprintf("but you've not\n");
  413. Xprintf("seriously wounded it.  In fact, you've made it more fierce ");
  414. Xprintf("than before.\n");
  415. X                sw_hurt = TRUE ;
  416. X            }
  417. X            else {
  418. Xprintf("You've hit the wombat again, but it is still going ");
  419. Xprintf("strong.\n");
  420. X            }
  421. X        }
  422. X        monster_flag = F_wounded ;
  423. X        return ;
  424. X    }
  425. X
  426. X    if (rifle_flag == F_single) {
  427. Xprintf("That last bullet was the straw which broke the ") ;
  428. Xprintf("wombat's back.\n") ;
  429. Xprintf("The blasted thing is finally dead!\n\n") ;
  430. X    }
  431. X    else {
  432. Xprintf("The bullets did the trick on the wretched thing.  It's ") ;
  433. Xprintf("dead as a doornail.\n\n") ;
  434. X    }
  435. Xprintf("Suddenly the wombat's corpse starts to glow with an intense");
  436. Xprintf(" white light.\n") ;
  437. Xprintf("There is then a crackling sound as its body starts to burn.");
  438. Xprintf("  You can\n");
  439. Xprintf("smell the stench of burning hair.  Then the white light");
  440. Xprintf(" begins to dim,\n");
  441. Xprintf("leaving no trace left of the once formidable monster.\n");
  442. X    sw_hurt = FALSE ;
  443. X    Wombat->Location = B_destroyed ;
  444. X    Wombat->Status = F_asleep ;
  445. X    monster_flag = F_no_monster ;
  446. X    room[n][M_monster] = 0 ;
  447. X    return ;
  448. X} /* end of the mutant wombat block */
  449. X
  450. X/* shoot the hoop snake */
  451. Xif (tag[V_snake]) {
  452. X    for (j = 6; j <= 13; j++) {
  453. X        mnstr = (monster_start + j) ;  /* point to the monster */
  454. X        if (mnstr->Status != F_asleep) break ;
  455. X    }
  456. X    if (j > 13) {
  457. X        printf("I see no hoop snake for me to kill! \n") ;
  458. X        return ;
  459. X    }
  460. X
  461. X    /* Fire the rifle */
  462. X    if ((hits = shoot_it()) == 0) return  ;
  463. X
  464. X    /* Toggle the hurt switch if this is the first hit */
  465. X    if (mnstr->Hits == 0)  sw_hurt = FALSE ;
  466. X    mnstr->Hits += hits ;
  467. X
  468. X    if ((rifle_flag == F_single)&&(mnstr->Hits < 3)) {
  469. X        if (mnstr->Hits == 1) {
  470. Xprintf("Your bullet hit the hoop snake.  However the hoop snake's ");
  471. Xprintf("thick scales \n");
  472. Xprintf("slowed the bullet down.  The hoop snake is now hissing ");
  473. Xprintf("furiously. \n") ;
  474. X        }
  475. X        else {
  476. Xprintf("You've hit the hoop snake again, and it's hurting.  However ");
  477. Xprintf("it is still \n");
  478. Xprintf("alive and full of venom. \n") ;
  479. X        }
  480. X        monster_flag = F_wounded ;
  481. X        return ;
  482. X    }
  483. X
  484. X    if (rifle_flag == F_single) {
  485. Xprintf("The bullet hit the hoop snake finishing the horrible ") ;
  486. Xprintf("creature off. \n") ;
  487. X    }
  488. X    else {
  489. Xprintf("The bullets hit the hoop snake splatting it into a mass of ") ;
  490. Xprintf("mince meat. \n") ; 
  491. X    }
  492. Xprintf("Suddenly the bullet holed snake glows red and whooshes ");
  493. Xprintf("into a cloud \n") ;
  494. Xprintf("steam, leaving no traces behind.\n\n") ;
  495. X    mnstr->Location = B_destroyed ;
  496. X    mnstr->Status = F_asleep ;
  497. X    monster_flag = F_no_monster ;
  498. X    room[n][M_monster] = 0 ;
  499. X    return ;
  500. X} /* end of the hoop snake block */
  501. X
  502. X/* see if the target is in the room or holding it */
  503. Xpnt = object ;
  504. Xfor (j = 0; j < Objcnt; j++) {
  505. X    if (tag[pnt->ID]){
  506. X         if (pnt->ID == V_rifle) continue ;
  507. X        sw_other_object = TRUE ;
  508. X        if (pnt->Location == n)  break ;
  509. X        if (pnt->Location == B_have) {
  510. Xprintf("I will ***NOT*** shoot at something that I'm holding!!\n");
  511. X            return ;
  512. X        }
  513. X    }
  514. X    pnt++ ;
  515. X}
  516. X/* Object shoot at */
  517. Xif (j < Objcnt) {
  518. X
  519. X    switch(pnt->ID) {
  520. X
  521. X    case V_can:
  522. X    case V_beer:
  523. X    case V_fourex:
  524. X    case V_Fourex:
  525. X        if ((hits = shoot_it()) == 0) return  ;
  526. Xprintf("The can is hit by a bullet and flies off out of sight.\n");
  527. X        Can->Location = B_destroyed ;
  528. X        return;
  529. X
  530. X    case V_bottle:
  531. X    case V_lager:
  532. X        if ((hits = shoot_it()) == 0) return  ;
  533. Xprintf("It is hit by a bullet and shatters into a million pieces.\n");
  534. X        Bottle->Location = B_destroyed ;
  535. X        return;
  536. X
  537. X    case V_dynamite:
  538. X        if ((hits = shoot_it()) == 0) return  ;
  539. Xprintf("Nothing happens!  The \"dynamite\" is actually a very safe\n") ;
  540. Xprintf("mining explosive which won't detonate even if impacted by a high\n") ;
  541. Xprintf("speed bullet (TRUE story!).  However this sort of explosive will\n") ;
  542. Xprintf("always detonate with a blasting cap.\n") ;
  543. X        return;
  544. X
  545. X    case V_cap:
  546. X        if ((hits = shoot_it()) == 0) return  ;
  547. Xprintf("POP!!  The blasting cap explodes but causes no damage.\n") ;
  548. X        Cap->Location = B_destroyed ;
  549. X        return;
  550. X
  551. X    case V_gong:
  552. X        if ((hits = shoot_it()) == 0) return  ;
  553. X        printf("The bullet") ;
  554. X        if (hits > 1) printf("s") ;
  555. Xprintf(" went cleanly through the soft silver metal of\n") ;
  556. Xprintf("the gong making a weird humming noise in the process.  It's\n") ;
  557. Xprintf("a pointless waste of ammunition vandalizing this beautiful\n") ;
  558. Xprintf("gong.\n") ;
  559. X        return;
  560. X        
  561. X    case V_safe:
  562. X        if (Picture->Status == S_open) {
  563. X            if ((hits = shoot_it()) == 0) return  ;
  564. Xprintf("The safe is made out of harden steel.  You'll only waste ") ;
  565. Xprintf("ammunition \nshooting at it.  Try to unlock it instead. \n") ;
  566. X        }
  567. X        else printf("I don't see a safe to shoot at.\n") ;
  568. X        return ;
  569. X
  570. X    case V_letter:
  571. X        if ((hits = shoot_it()) == 0) return  ;
  572. X        boom() ; /* cause an explosion */
  573. Xprintf("That was clever of you to realize the letter was really\n") ;
  574. Xprintf("a letter bomb.  However shooting a letter bomb while you're\n") ;
  575. Xprintf("right next to it was less than clever. Too bad you got blown\n") ;
  576. Xprintf("to pieces discovering that bit of wisdom.\n\n") ;
  577. X        ender(F_died) ;
  578. X
  579. X    default:
  580. X        if ((hits = shoot_it()) == 0) return  ;
  581. Xprintf("Except for wasting ammunition nothing much happened.\n") ;
  582. X        return ;
  583. X    } /* end of target switch group */
  584. X} /* end of the "object shot at" block */
  585. X
  586. Xif (sw_other_object) {
  587. Xprintf("I don't see the target.\n") ;
  588. X    return ;
  589. X}
  590. X
  591. X/* There was no target specified so the shot was wasted */
  592. Xif (tag[V_DIRECTION]) { 
  593. X    /* Fire the rifle */
  594. X    if ((hits = shoot_it()) == 0) return  ;
  595. Xprintf("You shoot in that direction but didn't accomplish anything\n") ;
  596. Xprintf("except waste ammunition.\n") ;
  597. X}
  598. Xelse {
  599. Xprintf("It may be obvious to you, but I don't understand what you\n") ;
  600. Xprintf("want to shoot at.\n");
  601. X}
  602. Xreturn ;
  603. X
  604. X} /* --- end of the "killer" subroutine --- */
  605. X#if (PROTOTYPE)
  606. Xint shoot_it(void)
  607. X#else
  608. Xint shoot_it()
  609. X#endif
  610. X/********************************************************************/
  611. X/*                                                                  */
  612. X/*  Software by Gary A. Allen, Jr. 23 January 1993  Version: Mk 1.0 */
  613. X/*           (c) Copyright 1993 by Gary A. Allen, Jr.               */
  614. X/*                                                                  */
  615. X/********************************************************************/
  616. X{
  617. Xregister int i ;
  618. X
  619. Xint hits, i_10, i_fract ;
  620. X
  621. Xif (Rifle->Location != B_have) {
  622. Xprintf("I would do that.  Only there is one small problem.... \n") ;
  623. X    printf("I don't have a rifle in my possession! \n") ;
  624. X    return(0) ;
  625. X}
  626. X/* Shoot the gun (or at least try to) */
  627. Xprintf("You pull the trigger... \n\n") ;
  628. Xif (clip_flag == F_no_clip) {
  629. Xprintf("Nothing happens!  \n") ;
  630. Xprintf("Your rifle doesn't have an ammunition clip in it.\n") ;
  631. X    return(0) ;
  632. X}
  633. Xif (Rifle->Status <= 0) {
  634. X    printf("Nothing happens!  The ammo clip is out of bullets.\n") ;
  635. X    return(0) ;
  636. X}
  637. Xswitch(rifle_flag) {
  638. Xcase F_safety:
  639. X    printf("Nothing happens!  The rifle's safety is still on.\n");
  640. X    return(0) ;
  641. X            
  642. Xcase F_single:
  643. X    printf("Bam! \n\n") ;
  644. X    --Rifle->Status ;
  645. X    if (clip_flag == F_normal_clip) hits = 1;
  646. X        else hits = 100 ;
  647. X    break ;
  648. X
  649. Xcase F_triple:
  650. X    if (Rifle->Status >= 3) {
  651. X        printf("Bam! Bam! Bam! \n\n") ;
  652. X        Rifle->Status -= 3 ;
  653. X        if (clip_flag == F_normal_clip) hits = 3;
  654. X            else hits = 300 ;
  655. X    }
  656. X    else {
  657. X        for (i = 1; i <= Rifle->Status; i++)  printf("Bam! ") ;
  658. X        printf("\n\nYou've run out of bullets. \n\n") ;
  659. X        if (clip_flag == F_normal_clip) hits = Rifle->Status ;
  660. X        else hits = Rifle->Status * 100 ;
  661. X        Rifle->Status = 0 ;
  662. X    }
  663. X    break ;
  664. X
  665. Xcase F_auto:
  666. X    if (Rifle->Status >= 30) {
  667. X        for (i = 1; i <= 3; i++) 
  668. Xprintf("Bam! Bam! Bam! Bam! Bam! Bam! Bam! Bam! Bam! Bam! \n") ;
  669. X        Rifle->Status -= 30 ;
  670. X        hits = 30;
  671. X    }
  672. X    else {
  673. X        i_10 = Rifle->Status / 10 ;
  674. X        i_fract = Rifle->Status - (i_10 * 10) ;
  675. X        for (i = 1; i <= i_10; i++) 
  676. Xprintf("Bam! Bam! Bam! Bam! Bam! Bam! Bam! Bam! Bam! Bam! \n") ;
  677. X        for (i = 1; i <= i_fract; i++)  printf("Bam! ") ;
  678. X        printf("\n\nYou've run out of bullets. \n") ;
  679. X        if (clip_flag == F_normal_clip)  hits = Rifle->Status ;
  680. X        else hits = Rifle->Status * 100 ;
  681. X        Rifle->Status = 0 ;
  682. X    }
  683. X    printf("\n") ;
  684. X    break ;
  685. X} /* end of rifle_flag "switch" block */
  686. X
  687. Xreturn(hits) ;
  688. X} /* --- end of the "shoot_it" function --- */
  689. X
  690. X#if (PROTOTYPE)
  691. Xvoid the_fork(void)
  692. X#else
  693. Xvoid the_fork()
  694. X#endif
  695. X{
  696. Xprintf("If you could see me now then you'd see me giving you a well\n") ;
  697. Xprintf("known Australian finger sign called \"The Fork\".  This is\n") ;
  698. Xprintf("similar to the \"V\" for victory sign but has an entirely\n") ;
  699. Xprintf("different meaning which I trust you understand.\n") ;
  700. X} /* --- end of the "the_fork" function --- */
  701. END_OF_FILE
  702. if test 19048 -ne `wc -c <'actor.c'`; then
  703.     echo shar: \"'actor.c'\" unpacked with wrong size!
  704. fi
  705. # end of 'actor.c'
  706. fi
  707. if test -f 'monster.c' -a "${1}" != "-c" ; then 
  708.   echo shar: Will not clobber existing file \"'monster.c'\"
  709. else
  710. echo shar: Extracting \"'monster.c'\" \(29700 characters\)
  711. sed "s/^X//" >'monster.c' <<'END_OF_FILE'
  712. X#define MNSTR
  713. X#include "dink_sym.h"
  714. X#include "dink_glb.h"
  715. X
  716. Xint sw_snaked = FALSE, sw_wombat = FALSE ;
  717. X#if (PROTOTYPE)
  718. Xvoid monster(int loc_pnt[3])
  719. X#else
  720. Xvoid monster(loc_pnt)
  721. Xint loc_pnt[3] ;
  722. X#endif
  723. X/********************************************************************/
  724. X/*                                                                  */
  725. X/*                  --- The Monster Subroutine ---                  */
  726. X/*                                                                  */
  727. X/*  monster_flag is a global variable input parameters              */
  728. X/*                                                                  */
  729. X/* Software by Gary A. Allen, Jr. 24 January 1993,  Version: Mk 1.6 */
  730. X/*           (c) Copyright 1993 by Gary A. Allen, Jr.               */
  731. X/*                                                                  */
  732. X/********************************************************************/
  733. X{
  734. Xregister int j ;
  735. Xint sw_chasing, sw_local ;
  736. Xstatic int sw_hoop = FALSE, bear_flag = 0 ;
  737. Xstatic int sw_replaced = FALSE ;
  738. Xstatic int sw_nogo = FALSE, sw_guarded = TRUE ;
  739. Xstatic int sw_letter = FALSE ;
  740. Xstatic int count_down = 0 ;
  741. X
  742. XMONSTER_STRUCT *mnstr, *mnstr_local, *mnstr_chase ;
  743. X
  744. X#if (PROTOTYPE)
  745. Xvoid ender(int), long_descp(int), hold_it(void), boom(void) ;
  746. Xvoid ned_kills(void), mullah_kills(void) ;
  747. Xvoid see_letter(int*, int*) ;
  748. Xvoid chief_mullah(int*) ;
  749. Xint bribe_mullah(int*) ;
  750. Xvoid chaser(MONSTER_STRUCT*, int[3]) ;
  751. X#else
  752. Xint bribe_mullah() ;
  753. X#endif
  754. X/* set up some of the input variables */
  755. Xsw_chasing = FALSE ; /* turn off the chasing monster switch */
  756. Xsw_local = FALSE ;   /* turn off the local monster switch */
  757. X
  758. X/* There can be no active monsters while in the closet */
  759. Xif (loc_pnt[0] == R_closet) {
  760. X    monster_flag = F_no_monster ;
  761. X    if (sw_letter == TRUE) {
  762. X        sw_letter = FALSE ;
  763. X        sw_nogo = TRUE ;
  764. Xprintf("\nYou hear a loud \"BOOM!\" from the Prayer Room followed\n");
  765. Xprintf("by the sounds of people shouting and cursing in Farsi. I\n");
  766. Xprintf("think it is definitely time that we leave.\n") ;
  767. X    }
  768. X    return ;
  769. X}
  770. X
  771. X/* scan the enemy table for the local and/or chasing monsters */
  772. Xfor (j = 0; j <= Enemy_cnt; j++) {
  773. X    mnstr = (monster_start + j) ;  /* point to the monster */
  774. X    if (mnstr->Location == loc_pnt[0]) {
  775. X        sw_local = TRUE;
  776. X        mnstr_local = mnstr ;
  777. X    }
  778. X    else if (mnstr->Status != F_asleep){
  779. X        if ((N_mullah == j)||(N_guards == j)||((N_ned == j)&&
  780. X        (mnstr->Status == F_stealing))) continue ;
  781. X        sw_chasing = TRUE;
  782. X        mnstr_chase = mnstr ;
  783. X    }
  784. X} 
  785. X
  786. X/* see if the monster is local */
  787. Xif (sw_local) {
  788. X/* deal with case of being chased by monster to another monster */
  789. Xif (sw_chasing) {
  790. X    switch(mnstr_chase->Type) {
  791. X/* Mutant wombat scares off the local monser */
  792. X    case N_wombat:
  793. X/* put the local monster to sleep and swap location with wombat  */
  794. X    mnstr_local->Status = F_asleep ;
  795. X    --room[mnstr_local->Location][M_monster] ;
  796. X    mnstr_local->Location = Wombat->Location ;
  797. X    ++room[Wombat->Location][M_monster] ;
  798. X    chaser(mnstr_chase, loc_pnt) ;
  799. X    return ;
  800. X/* Hoop Snake breaks off the chase */
  801. X    case N_hoop_snake:
  802. Xprintf("                     ---- What a relief!! ---- \n") ;
  803. Xprintf("           The dreaded hoop snake has broken off pursuit.\n");
  804. Xprintf("                         But what is this!!\n\n") ;
  805. Xprintf("You see yet another terrible creature!\n");
  806. X    sw_replaced = TRUE  ;
  807. X    break ;
  808. X    }
  809. X    /* put the chasing monster to sleep */
  810. X    monster_flag = F_no_monster ;
  811. X    mnstr_chase->Status = F_asleep ;
  812. X    sw_chasing = FALSE;
  813. X}
  814. X
  815. X/* local monster routines */
  816. Xswitch(mnstr_local->Type) {
  817. X
  818. X/* Revolutionary Guard local (only) behavior */
  819. Xcase N_guards:
  820. Xmonster_flag = F_monster_active ;
  821. X
  822. X/* guards always kill after the letter bomb has exploded */
  823. Xif (sw_nogo) {
  824. Xprintf("\nWith you are three men dressed in ripped and shredded ");
  825. Xprintf("clothes which have\nbeen blackened by an explosion.  They ") ;
  826. Xprintf("are armed to the teeth and insane\nwith rage.  They take ");
  827. Xprintf("one look at you and proceed to cut you to pieces with\n");
  828. Xprintf("their automatic weapons!\n\n");
  829. X    ender(F_died) ;
  830. X}
  831. X
  832. X/* guards always kill if they see a rifle */
  833. Xif (Rifle->Location == B_have) {
  834. Xprintf("With you are four men dressed in rather shabby clothes. ");
  835. Xprintf("Three of them\nare clutching AK-47 assault rifles while ");
  836. Xprintf("the fourth one is holding an Uzi\nmachine gun. They ") ;
  837. Xprintf("take one look at the M-16 rifle which you are clutching,\n");
  838. Xprintf("point their own weapons at you and proceed to hose you ");
  839. Xprintf("with a hail of\nlead!  Five seconds later you look like ");
  840. Xprintf("a piece of Swiss cheese.\n\n") ;
  841. X    ender(F_died) ;
  842. X}
  843. X
  844. Xswitch (Guards->Status) {
  845. X    case F_asleep:
  846. X        Guards->Status = F_passive ;
  847. Xprintf("With you are four men dressed in rather shabby clothes. ");
  848. Xprintf("Three of them\nare clutching AK-47 assault rifles while ");
  849. Xprintf("the fourth one is holding an Uzi\nmachine gun. They ") ;
  850. Xprintf("search you but find nothing that is obviously a\n") ;
  851. Xprintf("weapon.  They are in a quandary on what to do with ") ;
  852. Xprintf("you, since you\nliterally appeared out of thin air.\n");
  853. X        return ;
  854. X    
  855. X    case F_passive:
  856. X        if (Mullah->Status == F_asleep) {
  857. Xprintf("\nThe four men have concluded that the best thing to do\n");
  858. Xprintf("with you is to take you to their superiors.  Two of the men\n");
  859. Xprintf("roughly grab hold of you and fling you bodily through the\n");
  860. Xprintf("doorway to the east.\n\n") ;
  861. X        loc_pnt[0] = R_prayer;
  862. X        long_descp(R_prayer) ;
  863. X        chief_mullah(&count_down) ;
  864. X        return ;
  865. X        }
  866. X        if (sw_guarded) {
  867. Xprintf("\nAll of the guards are currently in the prayer room.\n") ;
  868. X            sw_guarded = FALSE ;
  869. X        }
  870. X        return ;
  871. X
  872. X    case F_aggressive:
  873. X        Guards->Status = F_killing ;
  874. Xprintf("\nThe four guards grab you by the arms and legs, and frog\n");
  875. Xprintf("march you back into the prayer room.\n");
  876. X        loc_pnt[0] = R_prayer;
  877. X        return ;
  878. X
  879. X    case F_killing:
  880. Xprintf("\nThe guards are tired of fooling with you.  One of them\n") ;
  881. Xprintf("hits you on the head with the butt of his rifle.  Then the\n");
  882. Xprintf("other two guards drag you outside where you are executed\n");
  883. Xprintf("before a jeering mob of 30,000 people!\n\n") ;
  884. X        ender(F_died) ;
  885. X
  886. X} /* end of the Guards local routine and switch block */
  887. X
  888. X
  889. X/* Chief Mullah local (only) behaivor */
  890. Xcase N_mullah:
  891. Xswitch (Mullah->Status) {
  892. X    case F_asleep:
  893. X        chief_mullah(&count_down) ;
  894. X        return ;
  895. X
  896. X    case F_aggressive:
  897. X        /* The Mullah takes any valuables dropped */
  898. X        if (bribe_mullah(&count_down)) return ;
  899. X
  900. X        /* The Mullah sees and takes the letter */
  901. X        if (Letter->Location == R_prayer) {
  902. X            see_letter(&count_down, &sw_letter);
  903. X            return ;
  904. X        }
  905. X        count_down++ ;
  906. X        switch(count_down) {
  907. X        case 1:
  908. Xprintf("\nThe Mullah is waiting for you to give him something.\n") ;
  909. X            return ;
  910. X        case 2:
  911. Xprintf("\nThe Mullah is becoming quite impatient.  You had better\n") ;
  912. Xprintf("do something soon!\n") ;
  913. X        Mullah->Status = F_killing ;
  914. X        }
  915. X        return ;
  916. X
  917. X    case F_passive:
  918. X        count_down++ ;
  919. X        switch(count_down) {
  920. X
  921. X        case 1:
  922. Xprintf("\nThe Mullah is examining the envelope of Muammar's letter.\n");
  923. X            return ;
  924. X
  925. X        case 2:
  926. Xprintf("\nThe Mullah has turned the envelope over and is just\n") ;
  927. Xprintf("about to open it.\n") ;
  928. X            return ;
  929. X
  930. X        case 3:
  931. X            boom() ;
  932. Xprintf("The Mullah opened the letter.  Needless to say, the letter\n") ;
  933. Xprintf("was a bomb.  The good news is the nasty old Mullah died.\n");
  934. Xprintf("The bad news is you died in the explosion as well!\n\n") ;
  935. X            ender(F_died) ;
  936. X        }
  937. X
  938. X    case F_killing:
  939. X        if (bribe_mullah(&count_down)) {
  940. X            Mullah->Status = F_aggressive ;
  941. X            return ;
  942. X        }
  943. X        if (Letter->Location==R_prayer) {
  944. X            see_letter(&count_down, &sw_letter);
  945. X            return ;
  946. X        }
  947. Xprintf("\n\"You are a brainless idiot!\" screams the Mullah!\n") ;
  948. X        mullah_kills() ;
  949. X} /* end of mullah status switch block */
  950. X
  951. X/* The mullah sees Gaddafi's letter (this might be dead code) */
  952. X/* temporary */
  953. Xsee_letter(&count_down, &sw_letter);
  954. Xreturn ;
  955. X/* end of the mullah local behavior routine */
  956. X
  957. X/* Ned Kelly local behavior */
  958. Xcase N_ned:
  959. Xif (monster_flag == F_no_monster) {
  960. Xprintf("\nAs you approached the entrance of Ned Kelly's hide out, a ") ;
  961. Xprintf("man walked out\n") ;
  962. Xprintf("the front door and prevented you from entering.  He is ");
  963. Xprintf("wearing an iron\n") ;
  964. Xprintf("helmet with thin eye slits which completely covers ");
  965. Xprintf("his head.  He has\n") ;
  966. Xprintf("body armour made of thin sheets of iron that covers ");
  967. Xprintf("his chest and abdomen.\n") ;
  968. Xprintf("He is holding a 12 guage double barrel shotgun ");
  969. Xprintf("and has a pistol on\nhis hip.  ") ;
  970. Xprintf("I could be wrong but I think this is Ned Kelly!\n\n");
  971. X    loc_pnt[0] = R_hideout_entr ;
  972. X    monster_flag = F_monster_active ;
  973. X    Ned->Status = F_passive ;
  974. X    return ;
  975. X}
  976. Xelse {
  977. X    if (Ned->Status == F_killing) ned_kills() ;
  978. Xprintf("\nNed is not about to allow you to enter his hide out.  He ");
  979. Xprintf("is now expressing\n") ;
  980. Xprintf("his displeasure with your continued presence by cocking both ");
  981. Xprintf("of the hammers on\n") ;
  982. Xprintf("his shotgun and pointing it at your head.  I believe it is ");
  983. Xprintf("time to go!!\n\n") ;
  984. X    loc_pnt[0] = R_hideout_entr ;
  985. X    Ned->Status = F_killing ;
  986. X    return ;
  987. X}
  988. X
  989. X/* Mutant Wombat monster behavior */
  990. Xcase N_wombat:
  991. Xsw_replaced = FALSE ; 
  992. Xif (monster_flag == F_no_monster) {
  993. Xprintf("\n                        ----- OH NO!! -----\n") ;
  994. Xprintf("                  You are in ***SERIOUS TROUBLE*** !!!\n") ;
  995. Xprintf("Forget about hoop snakes, and forget about drop bears.  This ");
  996. Xprintf("is the WORST\n") ;
  997. Xprintf("thing that can be found in the ACME Mine.  You see before ");
  998. Xprintf("you the awful\n") ;
  999. Xprintf("spawn of the Pommy nuclear weapon's tests. Its ancestors ");
  1000. Xprintf("were inoffensive\n") ;
  1001. Xprintf("creatures, but gamma radiation has transformed this into...\n");
  1002. Xprintf("                      The Dreadful Mutant Wombat!! \n") ;
  1003. Xprintf("Normally I would advise you to run for your life.  However ");
  1004. Xprintf("there's really\n");
  1005. Xprintf("no point.  You can not out run this thing, and it's almost ");
  1006. Xprintf("impossible to\n");
  1007. Xprintf("kill.  You might as well just stand here and let it finish ");
  1008. Xprintf("you off as\n") ;
  1009. Xprintf("quickly and painlessly as possible.\n\n") ;
  1010. X    monster_flag = F_monster_active ;
  1011. X    Wombat->Status = F_aggressive ;
  1012. X    loc_pnt[1] = loc_pnt[0] ; 
  1013. X    loc_pnt[2] = 0 ; /* zero out the previous location */
  1014. X}
  1015. Xelse {
  1016. X    if (Wombat->Status == F_aggressive) {
  1017. Xprintf("\nThe wombat is approaching you.  Its mouth is wide open ") ;
  1018. Xprintf("showing its\n") ;
  1019. Xprintf("enormous canines.  Its claws are fully extended.  The ") ;
  1020. Xprintf("wombat sees\n") ;
  1021. Xprintf("you as an easy meal and is preparing to feast.\n") ;
  1022. X        Wombat->Status = F_killing ;
  1023. X        return ;
  1024. X    }
  1025. X    if (Wombat->Status == F_killing) {
  1026. X        /* The Mutant Wombat kills the player */
  1027. Xprintf("\nThe obscene creature has grasped you with its terrible ");
  1028. Xprintf("claws!  First the\n");
  1029. Xprintf("wombat rips off your right arm with a single jerk and ");
  1030. Xprintf("tosses it down its\n");
  1031. Xprintf("throat like it was an appetizer (which it was!).  Next ");
  1032. Xprintf("the monster studies\n");
  1033. Xprintf("you for a moment and then twists off your left leg and ") ; 
  1034. Xprintf("chews on it like\n") ;
  1035. Xprintf("a turkey drumstick.  After savoring your left leg, it ");
  1036. Xprintf("opens its mouth wide\n");
  1037. Xprintf("and stuffs you in head first!  Your last memory was ") ;
  1038. Xprintf("hearing the crunching\n");
  1039. Xprintf("of your own bones as the wombat's jaws clamped down!\n") ;
  1040. X        ender(F_died) ;
  1041. X    }
  1042. X}
  1043. Xreturn ;
  1044. X
  1045. X/* Drop Bear monster behavior */
  1046. Xcase N_drop_bear:
  1047. Xsw_replaced = FALSE ; 
  1048. Xif (monster_flag == F_no_monster) {
  1049. X    switch(bear_flag) {
  1050. Xcase 0:
  1051. Xprintf("\nAs you walk in, you see something that looks vaguely like") ;
  1052. Xprintf(" a koala bear\n") ;
  1053. Xprintf("sitting in the middle of the floor.  However this \"koala\"") ;
  1054. Xprintf(" has vampire\n") ;
  1055. Xprintf("teeth and blood drooling down the sides of its mouth. The") ;
  1056. Xprintf(" bear takes\n") ;
  1057. Xprintf("one look at you and climbs up the wall onto the ceiling.") ;
  1058. Xprintf(" It \n") ;
  1059. Xprintf("clings to the ceiling much like a fly and seems to be") ;
  1060. Xprintf(" positioning\n") ;
  1061. Xprintf("itself to be directly over you.  I could be wrong but I") ;
  1062. Xprintf(" think this is\n") ;
  1063. Xprintf("the deadly DROP BEAR! \n\n") ;
  1064. X    bear_flag = 1 ;
  1065. X    break ;
  1066. X
  1067. Xcase 1:
  1068. Xprintf("\nJust as you walk in, a drop bear flashes by and hits") ;
  1069. Xprintf(" the ground with\n");
  1070. Xprintf("a THUNK.  That was close!  Had it hit you, and caught ") ;
  1071. Xprintf("hold with its\n");
  1072. Xprintf("claws, you would have been finished.  The dreaded ");
  1073. Xprintf("beast is now\n") ;
  1074. Xprintf("running up the wall towards the ceiling to give it ") ;
  1075. Xprintf("another go. I\n");
  1076. Xprintf("think we had better leave and soon!\n\n") ;;
  1077. X    bear_flag = 2 ;
  1078. X    break ;
  1079. X
  1080. Xcase 2:
  1081. Xprintf("\nAs you walk in, you see a drop bear lounging lazily in") ;
  1082. Xprintf(" the middle of\n");
  1083. Xprintf("the floor. It rolls over and takes one look at you, ") ;
  1084. Xprintf("runs towards\n");
  1085. Xprintf("the wall and scampers up to the ceiling.  It is now ");
  1086. Xprintf("positioning\n") ;
  1087. Xprintf("itself to be directly over you.\n\n") ;
  1088. X    bear_flag = 1 ;
  1089. X    }
  1090. X
  1091. Xmonster_flag = F_monster_active ;
  1092. Xmnstr_local->Status = F_aggressive ;
  1093. X}
  1094. Xelse {
  1095. X    if (mnstr_local->Status == F_aggressive) {
  1096. Xprintf("\nThe drop bear is now positioned directly above you.  It is") ;
  1097. Xprintf(" hanging batlike\n") ;
  1098. Xprintf("by its rear paws, with its front arms reaching out with");
  1099. Xprintf(" claws fully \n") ;
  1100. Xprintf("extended.  Its mouth is wide open with its vampire teeth ");
  1101. Xprintf("clearly visible.\n") ;
  1102. Xprintf("I think this thing means business!  Let's make a hasty ");
  1103. Xprintf("departure!!\n") ;
  1104. X        mnstr_local->Status = F_killing ;
  1105. X        return ;
  1106. X    }
  1107. X    if (mnstr_local->Status == F_killing) {
  1108. X        /* The drop bear kills the player */
  1109. Xprintf("\nThe drop bear drops on top of you!  First it grabs hold ") ;
  1110. Xprintf("of you with its \n") ;
  1111. Xprintf("sharp claws that sink deep into your flesh.  Then it bites ");
  1112. Xprintf("into your neck \n") ; 
  1113. Xprintf("at the jugular vein and begins sucking your blood.  You ");
  1114. Xprintf("try desperately \n") ;
  1115. Xprintf("to pull the horrible monster off, but it only clamps on ");
  1116. Xprintf("harder and sucks \n") ; 
  1117. Xprintf("more vigorously.  Soon you grow weak from lack of blood, ");
  1118. Xprintf("and lapse into death. \n") ;
  1119. X        ender(F_died) ;
  1120. X    }
  1121. X}
  1122. Xreturn ;
  1123. X/* Hoop Snake monster behavior */
  1124. Xcase N_hoop_snake:
  1125. Xif (monster_flag == F_no_monster) {
  1126. X    if (sw_replaced) { 
  1127. X        sw_replaced = FALSE  ;
  1128. Xprintf("\nA new and rested hoop snake rolls into view.  The ");
  1129. Xprintf("snake sees you, lets go of\n") ;
  1130. Xprintf("its tail and starts slithering towards you with fangs ");
  1131. Xprintf("at the ready. \n\n");
  1132. X    }
  1133. X    else {
  1134. X        if (!sw_hoop) {
  1135. Xprintf("\nSomething that looks vaguely like a barrel hoop rolls into ");
  1136. Xprintf("the passage. You \n") ;
  1137. Xprintf("suddenly realize to your horror that this is no hoop but a ");
  1138. Xprintf("snake biting its \n") ;
  1139. Xprintf("own tail.  The snake lets go of its tail and starts to ");
  1140. Xprintf("slither towards you \n") ;
  1141. Xprintf("like a regular, highly aggressive snake. \n\n");
  1142. X            sw_hoop = TRUE ;
  1143. X        }
  1144. X        else {
  1145. Xprintf("\nA hoop snake rolls towards you.  It lets go of its ");
  1146. Xprintf("tail and starts slithering\n") ;
  1147. Xprintf("in your direction. \n\n");
  1148. X        }
  1149. X    }
  1150. X    monster_flag = F_monster_active ;
  1151. X    mnstr_local->Status = F_aggressive ;
  1152. X    loc_pnt[1] = loc_pnt[0] ; 
  1153. X    loc_pnt[2] = 0 ; /* zero out the previous location */
  1154. X    return ;
  1155. X}
  1156. Xelse {
  1157. X    if (mnstr_local->Status == F_aggressive) {
  1158. Xprintf("\nThe hoop snake is coiling up in front of you and ") ;
  1159. Xprintf("hissing very aggressively. \n") ;
  1160. Xprintf("Venom is dripping from its sharp fangs and seems ") ;
  1161. Xprintf("to be burning holes into\n") ;
  1162. Xprintf("the stone floor.\n\n") ;
  1163. Xprintf("I think it would be wise for us to leave....  Quickly!!\n") ;
  1164. X        mnstr_local->Status = F_killing ;
  1165. X        return ;
  1166. X    }
  1167. X    if (mnstr_local->Status == F_killing) {
  1168. X        /* The Hoop Snake kills the player */
  1169. Xprintf("\nThe hoop snake strikes and bites you right on the nose!") ;
  1170. Xprintf("\n\nYou begin to thrash around ") ;
  1171. Xprintf("like a Baygon sprayed cocky.  The nerve poison \n") ;
  1172. Xprintf("makes you jerk around onto your back with your arms and ") ;
  1173. Xprintf("legs flailing about\n") ;
  1174. Xprintf("in the air.  With time your spasmodic twitching reduces") ;
  1175. Xprintf(" in frequency.  You\n") ;
  1176. Xprintf("slowly grind down to a halt with the coming of death. \n") ;
  1177. X        ender(F_died) ;
  1178. X    }
  1179. X
  1180. X}
  1181. X} /* end of the local monster switch group */
  1182. X}
  1183. X
  1184. Xchaser(mnstr_chase, loc_pnt) ;
  1185. Xreturn ;
  1186. X
  1187. X} /* --- end of the "monster" subroutine --- */
  1188. X
  1189. X#if (PROTOTYPE)
  1190. Xvoid chaser(MONSTER_STRUCT *mnstr, int loc_pnt[3])
  1191. X#else
  1192. Xvoid chaser(mnstr, loc_pnt)
  1193. XMONSTER_STRUCT *mnstr ;
  1194. Xint loc_pnt[3] ;
  1195. X#endif
  1196. X/********************************************************************/
  1197. X/*                                                                  */
  1198. X/*               --- Monster Chasing Subroutine ---                 */
  1199. X/*                                                                  */
  1200. X/* Software by Gary A. Allen, Jr. 8 December 1992, Version: Mk 2.0 */
  1201. X/*           (c) Copyright 1992 by Gary A. Allen, Jr.               */
  1202. X/*                                                                  */
  1203. X/********************************************************************/
  1204. X{ 
  1205. X
  1206. X#if (PROTOTYPE)
  1207. Xvoid ned_kills(void), ender(int) ;
  1208. Xvoid bugs(int) ;
  1209. X#endif
  1210. X
  1211. Xswitch(mnstr->Type) {
  1212. X/* Ned Kelly */
  1213. Xcase N_ned:
  1214. X    if (loc_pnt[0] == R_hideout_entr) {
  1215. X        if (Ned->Status == F_passive) {
  1216. Xprintf("\nNed Kelly is standing in front of you and is holding a ");
  1217. Xprintf("12 guage shotgun\n") ;
  1218. Xprintf("in a rather menacing manner.  This guy is really game!\n\n") ;
  1219. Xprintf("I suggest we leave.....   and quickly!!\n\n") ;
  1220. X            Ned->Status = F_aggressive ;
  1221. X            return ;
  1222. X        }
  1223. X        if (Ned->Status == F_aggressive) {
  1224. Xprintf("\nNed seems to be getting impatient with you.  He is now ");
  1225. Xprintf("expressing his\n") ;
  1226. Xprintf("displeasure with your continued presence by cocking both ");
  1227. Xprintf("of the hammers on\n") ;
  1228. Xprintf("his shotgun and pointing it at your head.  I really think ");
  1229. Xprintf("we should be\n") ;
  1230. Xprintf("making a hasty departure!!\n\n") ;
  1231. X            Ned->Status = F_killing ;
  1232. X            return ;
  1233. X        }
  1234. X        if (Ned->Status != F_killing) {
  1235. X            monster_flag = F_no_monster ;
  1236. X            Ned->Status = F_asleep ;
  1237. X            return ;
  1238. X        }
  1239. X        else ned_kills() ;
  1240. X    }
  1241. X    else {
  1242. X        monster_flag = F_no_monster ;
  1243. X        Ned->Status = F_asleep ;
  1244. X        return ;
  1245. X    }
  1246. X/* Mutant wombat chases */
  1247. Xcase N_wombat:
  1248. X    if (loc_pnt[0] == R_lift_inside) {
  1249. Xprintf("\nYou run as fast as you can into the lift.  You've made it! ") ;
  1250. Xprintf(" You're in the\n") ;
  1251. Xprintf("lift! However as you turn around, you realize to your horror") ;
  1252. Xprintf(" that the\n") ;
  1253. Xprintf("wombat has also made it inside the lift, and the door ");
  1254. Xprintf("is closing!!\n\n") ;
  1255. Xprintf("                     Ah, Stuff of Nightmares!!!\n") ;
  1256. Xprintf("          ---Trapped in a Lift with a Mutant Wombat!!!---\n\n");
  1257. Xprintf("This is just too horrible.  Let it suffice... You died. \n");
  1258. X    ender(F_died) ;
  1259. X    }
  1260. X    if (loc_pnt[0] == loc_pnt[2]) {
  1261. Xprintf("The wombat is in that direction.  You can't go that way!\n");
  1262. X        loc_pnt[0] = loc_pnt[1] ;
  1263. X        return ;
  1264. X    }
  1265. X    if (!sw_wombat) {
  1266. Xprintf("\nAs you flee down the passage, you hear the ");
  1267. Xprintf("\"THUD, THUD, THUD\" of the wombat\n") ;
  1268. Xprintf("trudging down the passage.  The horrible thing is after") ;
  1269. Xprintf(" you!  Give up\n") ;
  1270. Xprintf("all hope!  The wombat is driven by nuclear energy and") ;
  1271. Xprintf(" will never stop.\n\n") ;
  1272. X    sw_wombat = TRUE ;
  1273. X    }
  1274. X    else { 
  1275. Xprintf("\nThe wombat is still chasing you and not tiring. \n") ;
  1276. X    }
  1277. X    monster_flag = F_monster_active ;
  1278. X    mnstr->Status = F_aggressive ;
  1279. X    --room[mnstr->Location][M_monster] ;
  1280. X    ++room[loc_pnt[0]][M_monster] ;
  1281. X    mnstr->Location = loc_pnt[0] ;
  1282. X    loc_pnt[2] = loc_pnt[1] ;
  1283. X    loc_pnt[1] = loc_pnt[0] ;
  1284. X    return ;
  1285. X/* Hoop Snake chases */
  1286. Xcase N_hoop_snake:
  1287. X    if (loc_pnt[0] == R_lift_inside) {
  1288. Xprintf("\nYou seek refuge from the hoop snake by fleeing into the ") ;
  1289. Xprintf("lift.  Just as you\n") ;
  1290. Xprintf("enter the lift, its door begins to close.  Unfortunately the") ;
  1291. Xprintf(" hoop snake\n") ;
  1292. Xprintf("rolls in the instant before the door is fully closed.\n\n") ;
  1293. Xprintf("We will not describe the unpleasant events that occur behind");
  1294. Xprintf(" the closed door\n");
  1295. Xprintf("of the lift. However one can hear screams, curses, futile ");
  1296. Xprintf("banging on the\n");
  1297. Xprintf("lift door and loud snake hissing.  After a few minutes ");
  1298. Xprintf("there is again silence.\n");
  1299. Xprintf("The lift door opens and the hoop snake rolls out and away. ");
  1300. Xprintf("A peek inside the\n");
  1301. Xprintf("lift reveals your corpse which is in the early phases of ");
  1302. Xprintf("rigor mortis.\n") ;
  1303. X    ender(F_died) ;
  1304. X    }
  1305. X    if (loc_pnt[0] == loc_pnt[2]) {
  1306. X        if (mnstr->Status == F_killing) {
  1307. Xprintf("The hoop snake is in that direction.  ") ;
  1308. Xprintf("You can't go that way!\n");
  1309. X        loc_pnt[0] = loc_pnt[1] ;
  1310. X        return ;
  1311. X        }
  1312. X        else {
  1313. Xprintf("You have run back the way you came and passed the hoop ");
  1314. Xprintf("snake, which\n") ;
  1315. Xprintf("is still biting its tail and rolling like a hoop. The ") ;
  1316. Xprintf("vile creature\n") ;
  1317. Xprintf("hisses in frustration and does a U-turn to continue ") ;
  1318. Xprintf("the chase.\n\n") ;
  1319. X        }
  1320. X    }
  1321. X    else {
  1322. X        if (!sw_snaked) {
  1323. Xprintf("\nAs you flee down the passage, you hear the characteristic ") ;
  1324. Xprintf("sound of reptilian\n") ;
  1325. Xprintf("scales rubbing the stone floor.  You look over your shoulder") ;
  1326. Xprintf(" and see the\n") ;
  1327. Xprintf("hoop snake is rolling along right behind you! The dreaded") ;
  1328. Xprintf(" thing is chasing you!!\n\n") ;
  1329. X            sw_snaked = TRUE ;
  1330. X        }
  1331. X        else {
  1332. Xprintf("\nThe hoop snake is rolling along behind you, and still") ;
  1333. Xprintf(" in hot pursuit!\n\n") ;
  1334. X        }
  1335. X    }
  1336. X    monster_flag = F_monster_active ;
  1337. X    mnstr->Status = F_aggressive ;
  1338. X    --room[mnstr->Location][M_monster] ;
  1339. X    ++room[loc_pnt[0]][M_monster] ;
  1340. X    mnstr->Location = loc_pnt[0] ;
  1341. X    loc_pnt[2] = loc_pnt[1] ;
  1342. X    loc_pnt[1] = loc_pnt[0] ;
  1343. X    return ;
  1344. X
  1345. X/* Deactive all other possible monsters */
  1346. Xcase N_drop_bear:
  1347. Xcase N_mullah:
  1348. Xcase N_guards:
  1349. X    monster_flag = F_no_monster ;
  1350. X    mnstr->Status = F_asleep ;
  1351. X    return ;
  1352. X} /* end of the chasing monster switch group */
  1353. X
  1354. X/* This logic detects a potentially bad error. */
  1355. X/*         Normally this is dead code.         */
  1356. Xprintf("Run time error detected in \"chaser\" subroutine.\n") ;
  1357. Xprintf("\"mnstr->Type\" value was %d.\n",  mnstr->Type) ;
  1358. Xbugs(Logic_error) ;
  1359. Xreturn ;  /* this is just a dummy return for Lint */
  1360. X
  1361. X} /* --- end of the "chaser" subroutine --- */
  1362. X
  1363. X#if (PROTOTYPE)
  1364. Xvoid ned_kills(void)
  1365. X#else
  1366. Xvoid ned_kills()
  1367. X#endif
  1368. X/********************************************************************/
  1369. X/*                                                                  */
  1370. X/*           --- Ned Killy Kills the Player Subroutine ---           */
  1371. X/*                                                                  */
  1372. X/*  Software by Gary A. Allen, Jr. 7 December 1992, Version: Mk 1.0 */
  1373. X/*           (c) Copyright 1992 by Gary A. Allen, Jr.               */
  1374. X/*                                                                  */
  1375. X/********************************************************************/
  1376. X{
  1377. X
  1378. X#if (PROTOTYPE)
  1379. Xvoid ender(int) ;
  1380. X#endif
  1381. X
  1382. Xprintf("\nWith an air of professional detachment, Ned Kelly pulls ");
  1383. Xprintf("both triggers\n") ;
  1384. Xprintf("on his shotgun and blows your head clean off your ") ;
  1385. Xprintf("shoulders. \n\n") ;
  1386. X    ender(F_died) ;
  1387. X} /* --- end of the ned_kills" subroutine --- */
  1388. X
  1389. X#if (PROTOTYPE)
  1390. Xvoid mullah_kills(void)
  1391. X#else
  1392. Xvoid mullah_kills()
  1393. X#endif
  1394. X/********************************************************************/
  1395. X/*                                                                  */
  1396. X/*             --- Mullah Kills the Player Subroutine ---           */
  1397. X/*                                                                  */
  1398. X/*  Software by Gary A. Allen, Jr. 7 December 1992, Version: Mk 1.0 */
  1399. X/*           (c) Copyright 1992 by Gary A. Allen, Jr.               */
  1400. X/*                                                                  */
  1401. X/********************************************************************/
  1402. X{
  1403. X
  1404. X#if (PROTOTYPE)
  1405. Xvoid ender(int) ;
  1406. X#endif
  1407. X
  1408. Xprintf("\nWith that pronouncement, the chief Mullah claps his hands\n");
  1409. Xprintf("twice.  Two Revolutionary Guards drag you outside where you\n");
  1410. Xprintf("are executed before a jeering mob of 30,000 people!\n") ;
  1411. X    ender(F_died) ;
  1412. X} /* --- end of the "mullah_kills" subroutine --- */
  1413. X
  1414. X#if (PROTOTYPE)
  1415. Xvoid see_letter(int *count_on, int *sw_letter)
  1416. X#else
  1417. Xvoid see_letter(count_on, sw_letter)
  1418. Xint *count_on, *sw_letter ;
  1419. X#endif
  1420. X/********************************************************************/
  1421. X/*                                                                  */
  1422. X/*         --- Mullah see Gaddafi's Letter Subroutine ---           */
  1423. X/*                                                                  */
  1424. X/*  Software by Gary A. Allen, Jr. 7 December 1992, Version: Mk 1.0 */
  1425. X/*           (c) Copyright 1992 by Gary A. Allen, Jr.               */
  1426. X/*                                                                  */
  1427. X/********************************************************************/
  1428. X{
  1429. Xprintf("\nThe Mullah gives the letter a casual glance, then\n");
  1430. Xprintf("suddenly his face lights up and he claps his hands with\n") ;
  1431. Xprintf("glee.\n\n") ;
  1432. Xprintf("\"It's a letter from my old friend Muammar!\", he exclaims!\n");
  1433. Xprintf("\"This is an occasion for much jubulation.  As a token of\n");
  1434. Xprintf("my esteem take this ancient gong clapper made of gold and\n");
  1435. Xprintf("ivory.  It was recovered from the personal collection of\n") ;
  1436. Xprintf("the deposed Shah. It once belonged to the ancient Persian\n") ;
  1437. Xprintf("King Cyrus and is priceless!\"\n\n") ;
  1438. Xprintf("With this glad tiding the Mullah hands you the ancient\n") ;
  1439. Xprintf("clapper and then reaches down to pick up the letter from\n") ;
  1440. Xprintf("his old friend.\n") ;
  1441. X
  1442. XMullah->Status = F_passive ;
  1443. XGuards->Status = F_passive ;
  1444. XLetter->Location = B_destroyed ;
  1445. X--room[R_prayer][M_obj_cnt] ;
  1446. XClapper->Location = B_have ;
  1447. XDetector->Location = R_guard ;
  1448. X++room[R_guard][M_obj_cnt] ;
  1449. Xcarry_count++ ;
  1450. Xcarry_weight += Clapper->Weight ;
  1451. X*sw_letter = TRUE ;
  1452. X*count_on = 0 ;
  1453. X
  1454. X} /* --- end of the "see_letter" subroutine --- */
  1455. X
  1456. X#if (PROTOTYPE)
  1457. Xvoid chief_mullah(int *count_on)
  1458. X#else
  1459. Xvoid chief_mullah(count_on)
  1460. Xint *count_on ;
  1461. X#endif
  1462. X/********************************************************************/
  1463. X/*                                                                  */
  1464. X/*               --- Chief Mullah Subroutine ---                    */
  1465. X/*                                                                  */
  1466. X/*  Software by Gary A. Allen, Jr. 8 December 1992, Version: Mk 1.0 */
  1467. X/*           (c) Copyright 1992 by Gary A. Allen, Jr.               */
  1468. X/*                                                                  */
  1469. X/********************************************************************/
  1470. X{
  1471. Xregister int i ;
  1472. X
  1473. XOBJECT_STRUCT *pnt ;
  1474. X
  1475. X#if (PROTOTYPE)
  1476. Xvoid hold_it(void) ;
  1477. Xvoid mullah_kills(void) ;
  1478. X#endif
  1479. X
  1480. Xprintf("\n") ;
  1481. Xhold_it() ;
  1482. XMullah->Status = F_aggressive ;
  1483. XGuards->Status = F_aggressive ;
  1484. X
  1485. Xprintf("The chief Mullah (or whatever he is) who is sitting on the\n");
  1486. Xprintf("dias glares in your direction and begins expounding in a\n");
  1487. Xprintf("long monologue in Farsi. One of his Revolutionary Guards\n") ;
  1488. Xprintf("starts translating the Mullah's words into fairly good\n");
  1489. Xprintf("English (with an American accent!). Here is what he said:\n") ;
  1490. Xprintf("\n\"I can see by your slouch hat, singlet and short pants\n");
  1491. Xprintf("that you are a good-for-nothing satanic Australian. I am\n");
  1492. Xprintf("compelled to point out that your sort is most unwelcomed in\n");
  1493. X
  1494. X/* see if the player has any valuables or the letter */
  1495. Xpnt = object ;
  1496. Xfor (i = 0; i < Objcnt; i++) { 
  1497. X    if ((pnt->Location == B_have)&& 
  1498. X         ((V_letter == pnt->ID)||(pnt->Value > 0))) {
  1499. X
  1500. X/* Player has something the Mullah wants, so he lives */
  1501. Xprintf("this holy precinct.  Unless you can provide some good\n");
  1502. Xprintf("reasons (preferably financial ones) to the contrary, I\n");
  1503. Xprintf("shall order you to be executed immediately for the\n");
  1504. Xprintf("amusement and edification of the local populace!\"\n") ;
  1505. X            *count_on = 0 ;
  1506. X            return ;    
  1507. X    }
  1508. X    pnt++ ;
  1509. X}
  1510. X
  1511. X/* Player has no valuables and doesn't have the letter so he dies */
  1512. Xprintf("this holy precinct.  Since you have nothing of value, our\n");
  1513. Xprintf("usual practice would be to take you hostage and extract a\n");
  1514. Xprintf("ransom from your government.  However the Ozzie Dollar\n") ;
  1515. Xprintf("doesn't buy all that much anymore, so we'll just execute\n");
  1516. Xprintf("you and leave it at that.\"\n") ;
  1517. Xmullah_kills() ;
  1518. X
  1519. X} /* --- end of the "chief_mullah" subroutine --- */
  1520. X
  1521. X#if (PROTOTYPE)
  1522. Xint bribe_mullah(int *count_on)
  1523. X#else
  1524. Xint bribe_mullah(count_on)
  1525. Xint *count_on ;
  1526. X#endif
  1527. X/********************************************************************/
  1528. X/*                                                                  */
  1529. X/*               --- Chief Mullah Subroutine ---                    */
  1530. X/*                                                                  */
  1531. X/*  Software by Gary A. Allen, Jr. 3 January 1993 , Version: Mk 1.0 */
  1532. X/*           (c) Copyright 1993 by Gary A. Allen, Jr.               */
  1533. X/*                                                                  */
  1534. X/********************************************************************/
  1535. X{
  1536. Xregister int j ;
  1537. Xint sw_bribe ;
  1538. XOBJECT_STRUCT *pnt ;
  1539. X
  1540. X/* The Mullah takes any valuables dropped */
  1541. Xsw_bribe = FALSE ;
  1542. Xpnt = object ;
  1543. Xfor (j = 0; j < Objcnt; j++) { 
  1544. X    if ((pnt->Location == R_prayer) && (pnt->Value > 0)) {
  1545. X        pnt->Location = B_destroyed ;
  1546. X        --room[R_prayer][M_obj_cnt] ;
  1547. X        sw_bribe = TRUE ;
  1548. X    }
  1549. X    pnt++ ;
  1550. X}
  1551. Xif (sw_bribe) {
  1552. Xprintf("\nOne of the guards picks up the treasure and hands it over to\n") ;
  1553. Xprintf("the chief Mullah who discretely pockets it within his robe.  The\n") ;
  1554. Xprintf("Mullah then looks expectantly towards you...  I think he wants\n") ;
  1555. Xprintf("more treasure.\n") ;
  1556. X    *count_on = 0 ;
  1557. X    return(TRUE) ;    
  1558. X}
  1559. Xreturn(FALSE) ;
  1560. X
  1561. X} /* --- end of the "bribe_mullah" function --- */
  1562. X
  1563. END_OF_FILE
  1564. if test 29700 -ne `wc -c <'monster.c'`; then
  1565.     echo shar: \"'monster.c'\" unpacked with wrong size!
  1566. fi
  1567. # end of 'monster.c'
  1568. fi
  1569. echo shar: End of archive 5 \(of 7\).
  1570. cp /dev/null ark5isdone
  1571. MISSING=""
  1572. for I in 1 2 3 4 5 6 7 ; do
  1573.     if test ! -f ark${I}isdone ; then
  1574.     MISSING="${MISSING} ${I}"
  1575.     fi
  1576. done
  1577. if test "${MISSING}" = "" ; then
  1578.     echo You have unpacked all 7 archives.
  1579.     rm -f ark[1-9]isdone
  1580. else
  1581.     echo You still need to unpack the following archives:
  1582.     echo "        " ${MISSING}
  1583. fi
  1584. ##  End of shell archive.
  1585. exit 0
  1586.