1 # 2 /* Re-coding of advent in C: subroutines from main */ 3 4 static char sccsid[] = " subr.c 4.1 82/05/11 "; 5 6 # include "hdr.h" 7 8 /* Statement functions */ 9 toting(objj) 10 int objj; 11 { if (place[objj] == -1) return(TRUE); 12 else return(FALSE); 13 } 14 15 here(objj) 16 int objj; 17 { if (place[objj]==loc || toting(objj)) return(TRUE); 18 else return(FALSE); 19 } 20 21 at(objj) 22 int objj; 23 { if (place[objj]==loc || fixed[objj]==loc) return(TRUE); 24 else return (FALSE); 25 } 26 27 liq2(pbotl) 28 int pbotl; 29 { return((1-pbotl)*water+(pbotl/2)*(water+oil)); 30 } 31 32 liq(foo) 33 { register int i; 34 i=prop[bottle]; 35 if (i>-1-i) return(liq2(i)); 36 else return(liq2(-1-i)); 37 } 38 39 liqloc(locc) /* may want to clean this one up a bit */ 40 int locc; 41 { register int i,j,l; 42 i=cond[locc]/2; 43 j=((i*2)%8)-5; 44 l=cond[locc]/4; 45 l=l%2; 46 return(liq2(j*l+1)); 47 } 48 49 bitset(l,n) 50 int l,n; 51 { if (cond[l] & setbit[n]) return(TRUE); 52 return(FALSE); 53 } 54 55 forced(locc) 56 int locc; 57 { if (cond[locc]==2) return(TRUE); 58 return(FALSE); 59 } 60 61 dark(foo) 62 { if ((cond[loc]%2)==0 && (prop[lamp]==0 || !here(lamp))) 63 return(TRUE); 64 return(FALSE); 65 } 66 67 pct(n) 68 int n; 69 { if (ran(100)<n) return(TRUE); 70 return(FALSE); 71 } 72 73 74 fdwarf() /* 71 */ 75 { register int i,j; 76 register struct travlist *kk; 77 78 if (newloc!=loc&&!forced(loc)&&!bitset(loc,3)) 79 { for (i=1; i<=5; i++) 80 { if (odloc[i]!=newloc||!dseen[i]) continue; 81 newloc=loc; 82 rspeak(2); 83 break; 84 } 85 } 86 loc=newloc; /* 74 */ 87 if (loc==0||forced(loc)||bitset(newloc,3)) return(2000); 88 if (dflag==0) 89 { if (loc>=15) dflag=1; 90 return(2000); 91 } 92 if (dflag==1) /* 6000 */ 93 { if (loc<15||pct(95)) return(2000); 94 dflag=2; 95 for (i=1; i<=2; i++) 96 { j=1+ran(5); 97 if (pct(50)&&saved== -1) dloc[j]=0; /* 6001 */ 98 } 99 for (i=1; i<=5; i++) 100 { if (dloc[i]==loc) dloc[i]=daltlc; 101 odloc[i]=dloc[i]; /* 6002 */ 102 } 103 rspeak(3); 104 drop(axe,loc); 105 return(2000); 106 } 107 dtotal=attack=stick=0; /* 6010 */ 108 for (i=1; i<=6; i++) /* loop to 6030 */ 109 { if (dloc[i]==0) continue; 110 j=1; 111 for (kk=travel[dloc[i]]; kk!=0; kk=kk->next) 112 { newloc=kk->tloc; 113 if (newloc>300||newloc<15||newloc==odloc[i] 114 ||(j>1&&newloc==tk[j-1])||j>=20 115 ||newloc==dloc[i]||forced(newloc) 116 ||(i==6&&bitset(newloc,3)) 117 ||kk->conditions==100) continue; 118 tk[j++]=newloc; 119 } 120 tk[j]=odloc[i]; /* 6016 */ 121 if (j>=2) j--; 122 j=1+ran(j); 123 odloc[i]=dloc[i]; 124 dloc[i]=tk[j]; 125 dseen[i]=(dseen[i]&&loc>=15)||(dloc[i]==loc||odloc[i]==loc); 126 if (!dseen[i]) continue; /* i.e. goto 6030 */ 127 dloc[i]=loc; 128 if (i==6) /* pirate's spotted him */ 129 { if (loc==chloc||prop[chest]>=0) continue; 130 k=0; 131 for (j=50; j<=maxtrs; j++) /* loop to 6020 */ 132 { if (j==pyram&&(loc==plac[pyram] 133 || loc==plac[emrald])) goto l6020; 134 if (toting(j)) goto l6022; 135 l6020: if (here(j)) k=1; 136 } /* 6020 */ 137 if (tally==tally2+1 && k==0 && place[chest]==0 138 &&here(lamp) && prop[lamp]==1) goto l6025; 139 if (odloc[6]!=dloc[6]&&pct(20)) 140 rspeak(127); 141 continue; /* to 6030 */ 142 l6022: rspeak(128); 143 if (place[messag]==0) move(chest,chloc); 144 move(messag,chloc2); 145 for (j=50; j<=maxtrs; j++) /* loop to 6023 */ 146 { if (j==pyram && (loc==plac[pyram] 147 || loc==plac[emrald])) continue; 148 if (at(j)&&fixed[j]==0) carry(j,loc); 149 if (toting(j)) drop(j,chloc); 150 } 151 l6024: dloc[6]=odloc[6]=chloc; 152 dseen[6]=FALSE; 153 continue; 154 l6025: rspeak(186); 155 move(chest,chloc); 156 move(messag,chloc2); 157 goto l6024; 158 } 159 dtotal++; /* 6027 */ 160 if (odloc[i]!=dloc[i]) continue; 161 attack++; 162 if (knfloc>=0) knfloc=loc; 163 if (ran(1000)<95*(dflag-2)) stick++; 164 } /* 6030 */ 165 if (dtotal==0) return(2000); 166 if (dtotal!=1) 167 { printf("There are %d threatening little dwarves ",dtotal); 168 printf("in the room with you.\n"); 169 } 170 else rspeak(4); 171 if (attack==0) return(2000); 172 if (dflag==2) dflag=3; 173 if (saved!= -1) dflag=20; 174 if (attack!=1) 175 { printf("%d of them throw knives at you!\n",attack); 176 k=6; 177 l82: if (stick<=1) /* 82 */ 178 { rspeak(k+stick); 179 if (stick==0) return(2000); 180 } 181 else 182 printf("%d of them get you!\n",stick); /* 83 */ 183 oldlc2=loc; 184 return(99); 185 } 186 rspeak(5); 187 k=52; 188 goto l82; 189 } 190 191 192 march() /* label 8 */ 193 { register int ll1,ll2; 194 195 if ((tkk=travel[newloc=loc])==0) bug(26); 196 if (k==null) return(2); 197 if (k==cave) /* 40 */ 198 { if (loc<8) rspeak(57); 199 if (loc>=8) rspeak(58); 200 return(2); 201 } 202 if (k==look) /* 30 */ 203 { if (detail++<3) rspeak(15); 204 wzdark=FALSE; 205 abb[loc]=0; 206 return(2); 207 } 208 if (k==back) /* 20 */ 209 { switch(mback()) 210 { case 2: return(2); 211 case 9: goto l9; 212 default: bug(100); 213 } 214 } 215 oldlc2=oldloc; 216 oldloc=loc; 217 l9: 218 for (; tkk!=0; tkk=tkk->next) 219 if (tkk->tverb==1 || tkk->tverb==k) break; 220 if (tkk==0) 221 { badmove(); 222 return(2); 223 } 224 l11: ll1=tkk->conditions; /* 11 */ 225 ll2=tkk->tloc; 226 newloc=ll1; /* newloc=conditions */ 227 k=newloc%100; /* k used for prob */ 228 if (newloc<=300) 229 { if (newloc<=100) /* 13 */ 230 { if (newloc!=0&&!pct(newloc)) goto l12; /* 14 */ 231 l16: newloc=ll2; /* newloc=location */ 232 if (newloc<=300) return(2); 233 if (newloc<=500) 234 switch(specials())/* to 30000 */ 235 { case 2: return(2); 236 case 12: goto l12; 237 case 99: return(99); 238 default: bug(101); 239 } 240 rspeak(newloc-500); 241 newloc=loc; 242 return(2); 243 } 244 if (toting(k)||(newloc>200&&at(k))) goto l16; 245 goto l12; 246 } 247 if (prop[k]!=(newloc/100)-3) goto l16; /* newloc still conditions*/ 248 l12: /* alternative to probability move */ 249 for (; tkk!=0; tkk=tkk->next) 250 if (tkk->tloc!=ll2 || tkk->conditions!=ll1) break; 251 if (tkk==0) bug(25); 252 goto l11; 253 } 254 255 256 257 mback() /* 20 */ 258 { register struct travlist *tk2,*j; 259 register int ll; 260 if (forced(k=oldloc)) k=oldlc2; /* k=location */ 261 oldlc2=oldloc; 262 oldloc=loc; 263 tk2=0; 264 if (k==loc) 265 { rspeak(91); 266 return(2); 267 } 268 for (; tkk!=0; tkk=tkk->next) /* 21 */ 269 { ll=tkk->tloc; 270 if (ll==k) 271 { k=tkk->tverb; /* k back to verb */ 272 tkk=travel[loc]; 273 return(9); 274 } 275 if (ll<=300) 276 { j=travel[loc]; 277 if (forced(ll) && k==j->tloc) tk2=tkk; 278 } 279 } 280 tkk=tk2; /* 23 */ 281 if (tkk!=0) 282 { k=tkk->tverb; 283 tkk=travel[loc]; 284 return(9); 285 } 286 rspeak(140); 287 return(2); 288 } 289 290 291 specials() /* 30000 */ 292 { switch(newloc -= 300) 293 { case 1: /* 30100 */ 294 newloc = 99+100-loc; 295 if (holdng==0||(holdng==1&&toting(emrald))) return(2); 296 newloc=loc; 297 rspeak(117); 298 return(2); 299 case 2: /* 30200 */ 300 drop(emrald,loc); 301 return(12); 302 case 3: /* to 30300 */ 303 return(trbridge()); 304 default: bug(29); 305 } 306 } 307 308 309 trbridge() /* 30300 */ 310 { if (prop[troll]==1) 311 { pspeak(troll,1); 312 prop[troll]=0; 313 move(troll2,0); 314 move(troll2+100,0); 315 move(troll,plac[troll]); 316 move(troll+100,fixd[troll]); 317 juggle(chasm); 318 newloc=loc; 319 return(2); 320 } 321 newloc=plac[troll]+fixd[troll]-loc; /* 30310 */ 322 if (prop[troll]==0) prop[troll]=1; 323 if (!toting(bear)) return(2); 324 rspeak(162); 325 prop[chasm]=1; 326 prop[troll]=2; 327 drop(bear,newloc); 328 fixed[bear] = -1; 329 prop[bear]=3; 330 if (prop[spices]<0) tally2++; 331 oldlc2=newloc; 332 return(99); 333 } 334 335 336 badmove() /* 20 */ 337 { spk=12; 338 if (k>=43 && k<=50) spk=9; 339 if (k==29||k==30) spk=9; 340 if (k==7||k==36||k==37) spk=10; 341 if (k==11||k==19) spk=11; 342 if (verb==find||verb==invent) spk=59; 343 if (k==62||k==65) spk=42; 344 if (k==17) spk=80; 345 rspeak(spk); 346 return(2); 347 } 348 349 bug(n) 350 int n; 351 { printf("Please tell jim@rand-unix that fatal bug %d happened.\n",n); 352 exit(0); 353 } 354 355 356 checkhints() /* 2600 &c */ 357 { register int hint; 358 for (hint=4; hint<=hntmax; hint++) 359 { if (hinted[hint]) continue; 360 if (!bitset(loc,hint)) hintlc[hint]= -1; 361 hintlc[hint]++; 362 if (hintlc[hint]<hints[hint][1]) continue; 363 switch(hint) 364 { case 4: /* 40400 */ 365 if (prop[grate]==0&&!here(keys)) goto l40010; 366 goto l40020; 367 case 5: /* 40500 */ 368 if (here(bird)&&toting(rod)&&obj==bird) goto l40010; 369 continue; /* i.e. goto l40030 */ 370 case 6: /* 40600 */ 371 if (here(snake)&&!here(bird)) goto l40010; 372 goto l40020; 373 case 7: /* 40700 */ 374 if (atloc[loc]==0&&atloc[oldloc]==0 375 && atloc[oldlc2]==0&&holdng>1) goto l40010; 376 goto l40020; 377 case 8: /* 40800 */ 378 if (prop[emrald]!= -1&&prop[pyram]== -1) goto l40010; 379 goto l40020; 380 case 9: 381 goto l40010; /* 40900 */ 382 default: bug(27); 383 } 384 l40010: hintlc[hint]=0; 385 if (!yes(hints[hint][3],0,54)) continue; 386 printf("I am prepared to give you a hint, but it will "); 387 printf("cost you %d points.\n",hints[hint][2]); 388 hinted[hint]=yes(175,hints[hint][4],54); 389 l40020: hintlc[hint]=0; 390 } 391 } 392 393 394 trsay() /* 9030 */ 395 { register int i; 396 if (*wd2!=0) copystr(wd2,wd1); 397 i=vocab(wd1,-1); 398 if (i==62||i==65||i==71||i==2025) 399 { *wd2=0; 400 obj=0; 401 return(2630); 402 } 403 printf("\nOkay, \"%s\".\n",wd2); 404 return(2012); 405 } 406 407 408 trtake() /* 9010 */ 409 { register int i; 410 if (toting(obj)) return(2011); /* 9010 */ 411 spk=25; 412 if (obj==plant&&prop[plant]<=0) spk=115; 413 if (obj==bear&&prop[bear]==1) spk=169; 414 if (obj==chain&&prop[bear]!=0) spk=170; 415 if (fixed[obj]!=0) return(2011); 416 if (obj==water||obj==oil) 417 { if (here(bottle)&&liq(0)==obj) 418 { obj=bottle; 419 goto l9017; 420 } 421 obj=bottle; 422 if (toting(bottle)&&prop[bottle]==1) 423 return(9220); 424 if (prop[bottle]!=1) spk=105; 425 if (!toting(bottle)) spk=104; 426 return(2011); 427 } 428 l9017: if (holdng>=7) 429 { rspeak(92); 430 return(2012); 431 } 432 if (obj==bird) 433 { if (prop[bird]!=0) goto l9014; 434 if (toting(rod)) 435 { rspeak(26); 436 return(2012); 437 } 438 if (!toting(cage)) /* 9013 */ 439 { rspeak(27); 440 return(2012); 441 } 442 prop[bird]=1; /* 9015 */ 443 } 444 l9014: if ((obj==bird||obj==cage)&&prop[bird]!=0) 445 carry(bird+cage-obj,loc); 446 carry(obj,loc); 447 k=liq(0); 448 if (obj==bottle && k!=0) place[k] = -1; 449 return(2009); 450 } 451 452 453 dropper() /* 9021 */ 454 { k=liq(0); 455 if (k==obj) obj=bottle; 456 if (obj==bottle&&k!=0) place[k]=0; 457 if (obj==cage&&prop[bird]!=0) drop(bird,loc); 458 if (obj==bird) prop[bird]=0; 459 drop(obj,loc); 460 return(2012); 461 } 462 463 trdrop() /* 9020 */ 464 { 465 if (toting(rod2)&&obj==rod&&!toting(rod)) obj=rod2; 466 if (!toting(obj)) return(2011); 467 if (obj==bird&&here(snake)) 468 { rspeak(30); 469 if (closed) return(19000); 470 dstroy(snake); 471 prop[snake]=1; 472 return(dropper()); 473 } 474 if (obj==coins&&here(vend)) /* 9024 */ 475 { dstroy(coins); 476 drop(batter,loc); 477 pspeak(batter,0); 478 return(2012); 479 } 480 if (obj==bird&&at(dragon)&&prop[dragon]==0) /* 9025 */ 481 { rspeak(154); 482 dstroy(bird); 483 prop[bird]=0; 484 if (place[snake]==plac[snake]) tally2--; 485 return(2012); 486 } 487 if (obj==bear&&at(troll)) /* 9026 */ 488 { rspeak(163); 489 move(troll,0); 490 move(troll+100,0); 491 move(troll2,plac[troll]); 492 move(troll2+100,fixd[troll]); 493 juggle(chasm); 494 prop[troll]=2; 495 return(dropper()); 496 } 497 if (obj!=vase||loc==plac[pillow]) /* 9027 */ 498 { rspeak(54); 499 return(dropper()); 500 } 501 prop[vase]=2; /* 9028 */ 502 if (at(pillow)) prop[vase]=0; 503 pspeak(vase,prop[vase]+1); 504 if (prop[vase]!=0) fixed[vase] = -1; 505 return(dropper()); 506 } 507 508 509 tropen() /* 9040 */ 510 { if (obj==clam||obj==oyster) 511 { k=0; /* 9046 */ 512 if (obj==oyster) k=1; 513 spk=124+k; 514 if (toting(obj)) spk=120+k; 515 if (!toting(tridnt)) spk=122+k; 516 if (verb==lock) spk=61; 517 if (spk!=124) return(2011); 518 dstroy(clam); 519 drop(oyster,loc); 520 drop(pearl,105); 521 return(2011); 522 } 523 if (obj==door) spk=111; 524 if (obj==door&&prop[door]==1) spk=54; 525 if (obj==cage) spk=32; 526 if (obj==keys) spk=55; 527 if (obj==grate||obj==chain) spk=31; 528 if (spk!=31||!here(keys)) return(2011); 529 if (obj==chain) 530 { if (verb==lock) 531 { spk=172; /* 9049: lock */ 532 if (prop[chain]!=0) spk=34; 533 if (loc!=plac[chain]) spk=173; 534 if (spk!=172) return(2011); 535 prop[chain]=2; 536 if (toting(chain)) drop(chain,loc); 537 fixed[chain]= -1; 538 return(2011); 539 } 540 spk=171; 541 if (prop[bear]==0) spk=41; 542 if (prop[chain]==0) spk=37; 543 if (spk!=171) return(2011); 544 prop[chain]=0; 545 fixed[chain]=0; 546 if (prop[bear]!=3) prop[bear]=2; 547 fixed[bear]=2-prop[bear]; 548 return(2011); 549 } 550 if (closng) 551 { k=130; 552 if (!panic) clock2=15; 553 panic=TRUE; 554 return(2010); 555 } 556 k=34+prop[grate]; /* 9043 */ 557 prop[grate]=1; 558 if (verb==lock) prop[grate]=0; 559 k=k+2*prop[grate]; 560 return(2010); 561 } 562 563 564 trkill() /* 9120 */ 565 { register int i; 566 for (i=1; i<=5; i++) 567 if (dloc[i]==loc&&dflag>=2) break; 568 if (i==6) i=0; 569 if (obj==0) /* 9122 */ 570 { if (i!=0) obj=dwarf; 571 if (here(snake)) obj=obj*100+snake; 572 if (at(dragon)&&prop[dragon]==0) obj=obj*100+dragon; 573 if (at(troll)) obj=obj*100+troll; 574 if (here(bear)&&prop[bear]==0) obj=obj*100+bear; 575 if (obj>100) return(8000); 576 if (obj==0) 577 { if (here(bird)&&verb!=throw) obj=bird; 578 if (here(clam)||here(oyster)) obj=100*obj+clam; 579 if (obj>100) return(8000); 580 } 581 } 582 if (obj==bird) /* 9124 */ 583 { spk=137; 584 if (closed) return(2011); 585 dstroy(bird); 586 prop[bird]=0; 587 if (place[snake]==plac[snake]) tally2++; 588 spk=45; 589 } 590 if (obj==0) spk=44; /* 9125 */ 591 if (obj==clam||obj==oyster) spk=150; 592 if (obj==snake) spk=46; 593 if (obj==dwarf) spk=49; 594 if (obj==dwarf&&closed) return(19000); 595 if (obj==dragon) spk=147; 596 if (obj==troll) spk=157; 597 if (obj==bear) spk=165+(prop[bear]+1)/2; 598 if (obj!=dragon||prop[dragon]!=0) return(2011); 599 rspeak(49); 600 verb=0; 601 obj=0; 602 getin(&wd1,&wd2); 603 if (!weq(wd1,"y")&&!weq(wd1,"yes")) return(2608); 604 pspeak(dragon,1); 605 prop[dragon]=2; 606 prop[rug]=0; 607 k=(plac[dragon]+fixd[dragon])/2; 608 move(dragon+100,-1); 609 move(rug+100,0); 610 move(dragon,k); 611 move(rug,k); 612 for (obj=1; obj<=100; obj++) 613 if (place[obj]==plac[dragon]||place[obj]==fixd[dragon]) 614 move(obj,k); 615 loc=k; 616 k=null; 617 return(8); 618 } 619 620 621 trtoss() /* 9170: throw */ 622 { register int i; 623 if (toting(rod2)&&obj==rod&&!toting(rod)) obj=rod2; 624 if (!toting(obj)) return(2011); 625 if (obj>=50&&obj<=maxtrs&&at(troll)) 626 { spk=159; /* 9178 */ 627 drop(obj,0); 628 move(troll,0); 629 move(troll+100,0); 630 drop(troll2,plac[troll]); 631 drop(troll2+100,fixd[troll]); 632 juggle(chasm); 633 return(2011); 634 } 635 if (obj==food&&here(bear)) 636 { obj=bear; /* 9177 */ 637 return(9210); 638 } 639 if (obj!=axe) return(9020); 640 for (i=1; i<=5; i++) 641 { if (dloc[i]==loc) 642 { spk=48; /* 9172 */ 643 if (ran(3)==0||saved!= -1) 644 l9175: { rspeak(spk); 645 drop(axe,loc); 646 k=null; 647 return(8); 648 } 649 dseen[i]=FALSE; 650 dloc[i]=0; 651 spk=47; 652 dkill++; 653 if (dkill==1) spk=149; 654 goto l9175; 655 } 656 } 657 spk=152; 658 if (at(dragon)&&prop[dragon]==0) 659 goto l9175; 660 spk=158; 661 if (at(troll)) goto l9175; 662 if (here(bear)&&prop[bear]==0) 663 { spk=164; 664 drop(axe,loc); 665 fixed[axe]= -1; 666 prop[axe]=1; 667 juggle(bear); 668 return(2011); 669 } 670 obj=0; 671 return(9120); 672 } 673 674 675 trfeed() /* 9210 */ 676 { if (obj==bird) 677 { spk=100; 678 return(2011); 679 } 680 if (obj==snake||obj==dragon||obj==troll) 681 { spk=102; 682 if (obj==dragon&&prop[dragon]!=0) spk=110; 683 if (obj==troll) spk=182; 684 if (obj!=snake||closed||!here(bird)) return(2011); 685 spk=101; 686 dstroy(bird); 687 prop[bird]=0; 688 tally2++; 689 return(2011); 690 } 691 if (obj==dwarf) 692 { if (!here(food)) return(2011); 693 spk=103; 694 dflag++; 695 return(2011); 696 } 697 if (obj==bear) 698 { if (prop[bear]==0) spk=102; 699 if (prop[bear]==3) spk=110; 700 if (!here(food)) return(2011); 701 dstroy(food); 702 prop[bear]=1; 703 fixed[axe]=0; 704 prop[axe]=0; 705 spk=168; 706 return(2011); 707 } 708 spk=14; 709 return(2011); 710 } 711 712 713 trfill() /* 9220 */ 714 { if (obj==vase) 715 { spk=29; 716 if (liqloc(loc)==0) spk=144; 717 if (liqloc(loc)==0||!toting(vase)) return(2011); 718 rspeak(145); 719 prop[vase]=2; 720 fixed[vase]= -1; 721 return(9020); /* advent/10 goes to 9024 */ 722 } 723 if (obj!=0&&obj!=bottle) return(2011); 724 if (obj==0&&!here(bottle)) return(8000); 725 spk=107; 726 if (liqloc(loc)==0) spk=106; 727 if (liq(0)!=0) spk=105; 728 if (spk!=107) return(2011); 729 prop[bottle]=((cond[loc]%4)/2)*2; 730 k=liq(0); 731 if (toting(bottle)) place[k]= -1; 732 if (k==oil) spk=108; 733 return(2011); 734 } 735 736 737 closing() /* 10000 */ 738 { register int i; 739 prop[grate]=prop[fissur]=0; 740 for (i=1; i<=6; i++) 741 { dseen[i]=FALSE; 742 dloc[i]=0; 743 } 744 move(troll,0); 745 move(troll+100,0); 746 move(troll2,plac[troll]); 747 move(troll2+100,fixd[troll]); 748 juggle(chasm); 749 if(prop[bear]!=3) dstroy(bear); 750 prop[chain]=0; 751 fixed[chain]=0; 752 prop[axe]=0; 753 fixed[axe]=0; 754 rspeak(129); 755 clock1 = -1; 756 closng=TRUE; 757 return(19999); 758 } 759 760 761 caveclose() /* 11000 */ 762 { register int i; 763 prop[bottle]=put(bottle,115,1); 764 prop[plant]=put(plant,115,0); 765 prop[oyster]=put(oyster,115,0); 766 prop[lamp]=put(lamp,115,0); 767 prop[rod]=put(rod,115,0); 768 prop[dwarf]=put(dwarf,115,0); 769 loc=115; 770 oldloc=115; 771 newloc=115; 772 773 put(grate,116,0); 774 prop[snake]=put(snake,116,1); 775 prop[bird]=put(bird,116,1); 776 prop[cage]=put(cage,116,0); 777 prop[rod2]=put(rod2,116,0); 778 prop[pillow]=put(pillow,116,0); 779 780 prop[mirror]=put(mirror,115,0); 781 fixed[mirror]=116; 782 783 for (i=1; i<=100; i++) 784 if (toting(i)) dstroy(i); 785 rspeak(132); 786 closed=TRUE; 787 return(2); 788 } 789 790