billr@saab.CNA.TEK.COM (Bill Randle) (05/15/91)
Submitted-by: ian@airs.COM Posting-number: Volume 12, Issue 73 Archive-name: cdungeon/Part06 Environment: Unix, MS-DOS #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 6 (of 12)." # Contents: objcts.c verbs.c # Wrapped by billr@saab on Tue May 14 16:27:39 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'objcts.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'objcts.c'\" else echo shar: Extracting \"'objcts.c'\" \(24355 characters\) sed "s/^X//" >'objcts.c' <<'END_OF_FILE' X/* OAPPLI- OBJECT SPECIAL ACTION ROUTINES */ X X/*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/ X/* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */ X/* WRITTEN BY R. M. SUPNIK */ X X#include "funcs.h" X#include "vars.h" X Xlogical oappli_(ri, arg) Xinteger ri; Xinteger arg; X{ X /* Initialized data */ X X const integer mxsmp = 99; X X /* System generated locals */ X integer i__1; X logical ret_val; X X /* Local variables */ X logical f; X integer flobts, i; X integer j, av, io, ir, iz; X integer odi2 = 0, odo2 = 0; X integer nloc; X X if (ri == 0) { X goto L10; X } X/* !ZERO IS FALSE APP. */ X if (ri <= mxsmp) { X goto L100; X } X/* !SIMPLE OBJECT? */ X if (prsvec_1.prso > 220) { X goto L5; X } X if (prsvec_1.prso != 0) { X odo2 = objcts_1.odesc2[prsvec_1.prso - 1]; X } XL5: X if (prsvec_1.prsi != 0) { X odi2 = objcts_1.odesc2[prsvec_1.prsi - 1]; X } X av = advs_1.avehic[play_1.winner - 1]; X flobts = FLAMBT + LITEBT + ONBT; X ret_val = TRUE_; X X switch (ri - mxsmp) { X case 1: goto L2000; X case 2: goto L5000; X case 3: goto L10000; X case 4: goto L11000; X case 5: goto L12000; X case 6: goto L15000; X case 7: goto L18000; X case 8: goto L19000; X case 9: goto L20000; X case 10: goto L22000; X case 11: goto L25000; X case 12: goto L26000; X case 13: goto L32000; X case 14: goto L35000; X case 15: goto L39000; X case 16: goto L40000; X case 17: goto L45000; X case 18: goto L47000; X case 19: goto L48000; X case 20: goto L49000; X case 21: goto L50000; X case 22: goto L51000; X case 23: goto L52000; X case 24: goto L54000; X case 25: goto L55000; X case 26: goto L56000; X case 27: goto L57000; X case 28: goto L58000; X case 29: goto L59000; X case 30: goto L60000; X case 31: goto L61000; X case 32: goto L62000; X } X bug_(6, ri); X X/* RETURN HERE TO DECLARE FALSE RESULT */ X XL10: X ret_val = FALSE_; X return ret_val; X X/* SIMPLE OBJECTS, PROCESSED EXTERNALLY. */ X XL100: X if (ri < 32) { X ret_val = sobjs_(ri, arg); X } X else { X ret_val = nobjs_(ri, arg); X } X return ret_val; X/* OAPPLI, PAGE 3 */ X X/* O100-- MACHINE FUNCTION */ X XL2000: X if (play_1.here != rindex_1.mmach) { X goto L10; X } X/* !NOT HERE? F */ X ret_val = opncls_(oindex_1.machi, 123, 124); X/* !HANDLE OPN/CLS. */ X return ret_val; X X/* O101-- WATER FUNCTION */ X XL5000: X if (prsvec_1.prsa != vindex_1.fillw) { X goto L5050; X } X/* !FILL X WITH Y IS */ X prsvec_1.prsa = vindex_1.putw; X/* !MADE INTO */ X i = prsvec_1.prsi; X prsvec_1.prsi = prsvec_1.prso; X prsvec_1.prso = i; X/* !PUT Y IN X. */ X i = odi2; X odi2 = odo2; X odo2 = i; XL5050: X if (prsvec_1.prso == oindex_1.water || prsvec_1.prso == oindex_1.gwate) { X goto L5100; X } X rspeak_(561); X/* !WATER IS IND OBJ, */ X return ret_val; X/* !PUNT. */ X XL5100: X if (prsvec_1.prsa != vindex_1.takew) { X goto L5400; X } X/* !TAKE WATER? */ X if (objcts_1.oadv[oindex_1.bottl - 1] == play_1.winner && objcts_1.ocan[ X prsvec_1.prso - 1] != oindex_1.bottl) { X goto L5500; X } X if (objcts_1.ocan[prsvec_1.prso - 1] == 0) { X goto L5200; X } X/* !INSIDE ANYTHING? */ X if ((objcts_1.oflag2[objcts_1.ocan[prsvec_1.prso - 1] - 1] & X OPENBT) != 0) { X goto L5200; X } X/* !YES, OPEN? */ X rspsub_(525, objcts_1.odesc2[objcts_1.ocan[prsvec_1.prso - 1] - 1]); X/* !INSIDE, CLOSED, PUNT. */ X return ret_val; X XL5200: X rspeak_(615); X/* !NOT INSIDE OR OPEN, */ X return ret_val; X/* !SLIPS THRU FINGERS. */ X XL5400: X if (prsvec_1.prsa != vindex_1.putw) { X goto L5700; X } X/* !PUT WATER IN X? */ X if (av != 0 && prsvec_1.prsi == av) { X goto L5800; X } X/* !IN VEH? */ X if (prsvec_1.prsi == oindex_1.bottl) { X goto L5500; X } X/* !IN BOTTLE? */ X rspsub_(297, odi2); X/* !WONT GO ELSEWHERE. */ X newsta_(prsvec_1.prso, 0, 0, 0, 0); X/* !VANISH WATER. */ X return ret_val; X XL5500: X if ((objcts_1.oflag2[oindex_1.bottl - 1] & OPENBT) != 0) { X goto L5550; X } X/* !BOTTLE OPEN? */ X rspeak_(612); X/* !NO, LOSE. */ X return ret_val; X XL5550: X if (qempty_(oindex_1.bottl)) { X goto L5600; X } X/* !OPEN, EMPTY? */ X rspeak_(613); X/* !NO, ALREADY FULL. */ X return ret_val; X XL5600: X newsta_(oindex_1.water, 614, 0, oindex_1.bottl, 0); X/* !TAKE WATER TO BOTTLE. */ X return ret_val; X XL5700: X if (prsvec_1.prsa != vindex_1.dropw && prsvec_1.prsa != vindex_1.pourw && X prsvec_1.prsa != vindex_1.givew) { X goto L5900; X } X if (av != 0) { X goto L5800; X } X/* !INTO VEHICLE? */ X newsta_(prsvec_1.prso, 133, 0, 0, 0); X/* !NO, VANISHES. */ X return ret_val; X XL5800: X newsta_(oindex_1.water, 0, 0, av, 0); X/* !WATER INTO VEHICLE. */ X rspsub_(296, objcts_1.odesc2[av - 1]); X/* !DESCRIBE. */ X return ret_val; X XL5900: X if (prsvec_1.prsa != vindex_1.throww) { X goto L10; X } X/* !LAST CHANCE, THROW? */ X newsta_(prsvec_1.prso, 132, 0, 0, 0); X/* !VANISHES. */ X return ret_val; X/* OAPPLI, PAGE 4 */ X X/* O102-- LEAF PILE */ X XL10000: X if (prsvec_1.prsa != vindex_1.burnw) { X goto L10500; X } X/* !BURN? */ X if (objcts_1.oroom[prsvec_1.prso - 1] == 0) { X goto L10100; X } X/* !WAS HE CARRYING? */ X newsta_(prsvec_1.prso, 158, 0, 0, 0); X/* !NO, BURN IT. */ X return ret_val; X XL10100: X newsta_(prsvec_1.prso, 0, play_1.here, 0, 0); X/* !DROP LEAVES. */ X jigsup_(159); X/* !BURN HIM. */ X return ret_val; X XL10500: X if (prsvec_1.prsa != vindex_1.movew) { X goto L10600; X } X/* !MOVE? */ X rspeak_(2); X/* !DONE. */ X return ret_val; X XL10600: X if (prsvec_1.prsa != vindex_1.lookuw || findex_1.rvclr != 0) { X goto L10; X } X rspeak_(344); X/* !LOOK UNDER? */ X return ret_val; X X/* O103-- TROLL, DONE EXTERNALLY. */ X XL11000: X ret_val = trollp_(arg); X/* !TROLL PROCESSOR. */ X return ret_val; X X/* O104-- RUSTY KNIFE. */ X XL12000: X if (prsvec_1.prsa != vindex_1.takew) { X goto L12100; X } X/* !TAKE? */ X if (objcts_1.oadv[oindex_1.sword - 1] == play_1.winner) { X rspeak_(160); X } X/* !PULSE SWORD. */ X goto L10; X XL12100: X if ((prsvec_1.prsa != vindex_1.attacw && prsvec_1.prsa != vindex_1.killw X || prsvec_1.prsi != oindex_1.rknif) && (prsvec_1.prsa != X vindex_1.swingw && prsvec_1.prsa != vindex_1.throww || X prsvec_1.prso != oindex_1.rknif)) { X goto L10; X } X newsta_(oindex_1.rknif, 0, 0, 0, 0); X/* !KILL KNIFE. */ X jigsup_(161); X/* !KILL HIM. */ X return ret_val; X/* OAPPLI, PAGE 5 */ X X/* O105-- GLACIER */ X XL15000: X if (prsvec_1.prsa != vindex_1.throww) { X goto L15500; X } X/* !THROW? */ X if (prsvec_1.prso != oindex_1.torch) { X goto L15400; X } X/* !TORCH? */ X newsta_(oindex_1.ice, 169, 0, 0, 0); X/* !MELT ICE. */ X objcts_1.odesc1[oindex_1.torch - 1] = 174; X/* !MUNG TORCH. */ X objcts_1.odesc2[oindex_1.torch - 1] = 173; X objcts_1.oflag1[oindex_1.torch - 1] &= ~ flobts; X newsta_(oindex_1.torch, 0, rindex_1.strea, 0, 0); X/* !MOVE TORCH. */ X findex_1.glacrf = TRUE_; X/* !GLACIER GONE. */ X if (! lit_(play_1.here)) { X rspeak_(170); X } X/* !IN DARK? */ X return ret_val; X XL15400: X rspeak_(171); X/* !JOKE IF NOT TORCH. */ X return ret_val; X XL15500: X if (prsvec_1.prsa != vindex_1.meltw || prsvec_1.prso != oindex_1.ice) { X goto L10; X } X if ((objcts_1.oflag1[prsvec_1.prsi - 1] & flobts) == flobts) { X goto L15600; X } X rspsub_(298, odi2); X/* !CANT MELT WITH THAT. */ X return ret_val; X XL15600: X findex_1.glacmf = TRUE_; X/* !PARTIAL MELT. */ X if (prsvec_1.prsi != oindex_1.torch) { X goto L15700; X } X/* !MELT WITH TORCH? */ X objcts_1.odesc1[oindex_1.torch - 1] = 174; X/* !MUNG TORCH. */ X objcts_1.odesc2[oindex_1.torch - 1] = 173; X objcts_1.oflag1[oindex_1.torch - 1] &= ~ flobts; XL15700: X jigsup_(172); X/* !DROWN. */ X return ret_val; X X/* O106-- BLACK BOOK */ X XL18000: X if (prsvec_1.prsa != vindex_1.openw) { X goto L18100; X } X/* !OPEN? */ X rspeak_(180); X/* !JOKE. */ X return ret_val; X XL18100: X if (prsvec_1.prsa != vindex_1.closew) { X goto L18200; X } X/* !CLOSE? */ X rspeak_(181); X return ret_val; X XL18200: X if (prsvec_1.prsa != vindex_1.burnw) { X goto L10; X } X/* !BURN? */ X newsta_(prsvec_1.prso, 0, 0, 0, 0); X/* !FATAL JOKE. */ X jigsup_(182); X return ret_val; X/* OAPPLI, PAGE 6 */ X X/* O107-- CANDLES, PROCESSED EXTERNALLY */ X XL19000: X ret_val = lightp_(oindex_1.candl); X return ret_val; X X/* O108-- MATCHES, PROCESSED EXTERNALLY */ X XL20000: X ret_val = lightp_(oindex_1.match); X return ret_val; X X/* O109-- CYCLOPS, PROCESSED EXTERNALLY. */ X XL22000: X ret_val = cyclop_(arg); X/* !CYCLOPS */ X return ret_val; X X/* O110-- THIEF, PROCESSED EXTERNALLY */ X XL25000: X ret_val = thiefp_(arg); X return ret_val; X X/* O111-- WINDOW */ X XL26000: X ret_val = opncls_(oindex_1.windo, 208, 209); X/* !OPEN/CLS WINDOW. */ X return ret_val; X X/* O112-- PILE OF BODIES */ X XL32000: X if (prsvec_1.prsa != vindex_1.takew) { X goto L32500; X } X/* !TAKE? */ X rspeak_(228); X/* !CANT. */ X return ret_val; X XL32500: X if (prsvec_1.prsa != vindex_1.burnw && prsvec_1.prsa != vindex_1.mungw) { X goto L10; X } X if (findex_1.onpolf) { X return ret_val; X } X/* !BURN OR MUNG? */ X findex_1.onpolf = TRUE_; X/* !SET HEAD ON POLE. */ X newsta_(oindex_1.hpole, 0, rindex_1.lld2, 0, 0); X jigsup_(229); X/* !BEHEADED. */ X return ret_val; X X/* O113-- VAMPIRE BAT */ X XL35000: X rspeak_(50); X/* !TIME TO FLY, JACK. */ X f = moveto_(bats_1.batdrp[rnd_(9)], play_1.winner); X/* !SELECT RANDOM DEST. */ X f = rmdesc_(0); X return ret_val; X/* OAPPLI, PAGE 7 */ X X/* O114-- STICK */ X XL39000: X if (prsvec_1.prsa != vindex_1.wavew) { X goto L10; X } X/* !WAVE? */ X if (play_1.here == rindex_1.mrain) { X goto L39500; X } X/* !ON RAINBOW? */ X if (play_1.here == rindex_1.pog || play_1.here == rindex_1.falls) { X goto L39200; X } X rspeak_(244); X/* !NOTHING HAPPENS. */ X return ret_val; X XL39200: X objcts_1.oflag1[oindex_1.pot - 1] |= VISIBT; X findex_1.rainbf = ! findex_1.rainbf; X/* !COMPLEMENT RAINBOW. */ X i = 245; X/* !ASSUME OFF. */ X if (findex_1.rainbf) { X i = 246; X } X/* !IF ON, SOLID. */ X rspeak_(i); X/* !DESCRIBE. */ X return ret_val; X XL39500: X findex_1.rainbf = FALSE_; X/* !ON RAINBOW, */ X jigsup_(247); X/* !TAKE A FALL. */ X return ret_val; X X/* O115-- BALLOON, HANDLED EXTERNALLY */ X XL40000: X ret_val = ballop_(arg); X return ret_val; X X/* O116-- HEADS */ X XL45000: X if (prsvec_1.prsa != vindex_1.hellow) { X goto L45100; X } X/* !HELLO HEADS? */ X rspeak_(633); X/* !TRULY BIZARRE. */ X return ret_val; X XL45100: X if (prsvec_1.prsa == vindex_1.readw) { X goto L10; X } X/* !READ IS OK. */ X newsta_(oindex_1.lcase, 260, rindex_1.lroom, 0, 0); X/* !MAKE LARGE CASE. */ X i = robadv_(play_1.winner, 0, oindex_1.lcase, 0) + robrm_( X play_1.here, 100, 0, oindex_1.lcase, 0); X jigsup_(261); X/* !KILL HIM. */ X return ret_val; X/* OAPPLI, PAGE 8 */ X X/* O117-- SPHERE */ X XL47000: X if (findex_1.cagesf || prsvec_1.prsa != vindex_1.takew) { X goto L10; X } X/* !TAKE? */ X if (play_1.winner != aindex_1.player) { X goto L47500; X } X/* !ROBOT TAKE? */ X rspeak_(263); X/* !NO, DROP CAGE. */ X if (objcts_1.oroom[oindex_1.robot - 1] != play_1.here) { X goto L47200; X } X/* !ROBOT HERE? */ X f = moveto_(rindex_1.caged, play_1.winner); X/* !YES, MOVE INTO CAGE. */ X newsta_(oindex_1.robot, 0, rindex_1.caged, 0, 0); X/* !MOVE ROBOT. */ X advs_1.aroom[aindex_1.arobot - 1] = rindex_1.caged; X objcts_1.oflag1[oindex_1.robot - 1] |= NDSCBT; X cevent_1.ctick[cindex_1.cevsph - 1] = 10; X/* !GET OUT IN 10 OR ELSE. */ X return ret_val; X XL47200: X newsta_(oindex_1.spher, 0, 0, 0, 0); X/* !YOURE DEAD. */ X rooms_1.rflag[rindex_1.cager - 1] |= RMUNG; X rrand[rindex_1.cager - 1] = 147; X jigsup_(148); X/* !MUNG PLAYER. */ X return ret_val; X XL47500: X newsta_(oindex_1.spher, 0, 0, 0, 0); X/* !ROBOT TRIED, */ X newsta_(oindex_1.robot, 264, 0, 0, 0); X/* !KILL HIM. */ X newsta_(oindex_1.cage, 0, play_1.here, 0, 0); X/* !INSERT MANGLED CAGE. */ X return ret_val; X X/* O118-- GEOMETRICAL BUTTONS */ X XL48000: X if (prsvec_1.prsa != vindex_1.pushw) { X goto L10; X } X/* !PUSH? */ X i = prsvec_1.prso - oindex_1.sqbut + 1; X/* !GET BUTTON INDEX. */ X if (i <= 0 || i >= 4) { X goto L10; X } X/* !A BUTTON? */ X if (play_1.winner != aindex_1.player) { X switch (i) { X case 1: goto L48100; X case 2: goto L48200; X case 3: goto L48300; X } X } X jigsup_(265); X/* !YOU PUSHED, YOU DIE. */ X return ret_val; X XL48100: X i = 267; X if (findex_1.carozf) { X i = 266; X } X/* !SPEED UP? */ X findex_1.carozf = TRUE_; X rspeak_(i); X return ret_val; X XL48200: X i = 266; X/* !ASSUME NO CHANGE. */ X if (findex_1.carozf) { X i = 268; X } X findex_1.carozf = FALSE_; X rspeak_(i); X return ret_val; X XL48300: X findex_1.caroff = ! findex_1.caroff; X/* !FLIP CAROUSEL. */ X if (! qhere_(oindex_1.irbox, rindex_1.carou)) { X return ret_val; X } X/* !IRON BOX IN CAROUSEL? */ X rspeak_(269); X/* !YES, THUMP. */ X objcts_1.oflag1[oindex_1.irbox - 1] ^= VISIBT; X if (findex_1.caroff) { X rooms_1.rflag[rindex_1.carou - 1] &= ~ RSEEN; X } X return ret_val; X X/* O119-- FLASK FUNCTION */ X XL49000: X if (prsvec_1.prsa == vindex_1.openw) { X goto L49100; X } X/* !OPEN? */ X if (prsvec_1.prsa != vindex_1.mungw && prsvec_1.prsa != vindex_1.throww) { X X goto L10; X } X newsta_(oindex_1.flask, 270, 0, 0, 0); X/* !KILL FLASK. */ XL49100: X rooms_1.rflag[play_1.here - 1] |= RMUNG; X rrand[play_1.here - 1] = 271; X jigsup_(272); X/* !POISONED. */ X return ret_val; X X/* O120-- BUCKET FUNCTION */ X XL50000: X if (arg != 2) { X goto L10; X } X/* !READOUT? */ X if (objcts_1.ocan[oindex_1.water - 1] != oindex_1.bucke || X findex_1.bucktf) { X goto L50500; X } X findex_1.bucktf = TRUE_; X/* !BUCKET AT TOP. */ X cevent_1.ctick[cindex_1.cevbuc - 1] = 100; X/* !START COUNTDOWN. */ X newsta_(oindex_1.bucke, 290, rindex_1.twell, 0, 0); X/* !REPOSITION BUCKET. */ X goto L50900; X/* !FINISH UP. */ X XL50500: X if (objcts_1.ocan[oindex_1.water - 1] == oindex_1.bucke || ! X findex_1.bucktf) { X goto L10; X } X findex_1.bucktf = FALSE_; X newsta_(oindex_1.bucke, 291, rindex_1.bwell, 0, 0); X/* !BUCKET AT BOTTOM. */ XL50900: X if (av != oindex_1.bucke) { X return ret_val; X } X/* !IN BUCKET? */ X f = moveto_(objcts_1.oroom[oindex_1.bucke - 1], play_1.winner); X/* !MOVE ADVENTURER. */ X f = rmdesc_(0); X/* !DESCRIBE ROOM. */ X return ret_val; X/* OAPPLI, PAGE 9 */ X X/* O121-- EATME CAKE */ X XL51000: X if (prsvec_1.prsa != vindex_1.eatw || prsvec_1.prso != oindex_1.ecake || X play_1.here != rindex_1.alice) { X goto L10; X } X newsta_(oindex_1.ecake, 273, 0, 0, 0); X/* !VANISH CAKE. */ X objcts_1.oflag1[oindex_1.robot - 1] &= ~ VISIBT; X ret_val = moveto_(rindex_1.alism, play_1.winner); X/* !MOVE TO ALICE SMALL. */ X iz = 64; X ir = rindex_1.alism; X io = rindex_1.alice; X goto L52405; X X/* O122-- ICINGS */ X XL52000: X if (prsvec_1.prsa != vindex_1.readw) { X goto L52200; X } X/* !READ? */ X i = 274; X/* !CANT READ. */ X if (prsvec_1.prsi != 0) { X i = 275; X } X/* !THROUGH SOMETHING? */ X if (prsvec_1.prsi == oindex_1.bottl) { X i = 276; X } X/* !THROUGH BOTTLE? */ X if (prsvec_1.prsi == oindex_1.flask) { X i = prsvec_1.prso - oindex_1.orice + 277; X } X/* !THROUGH FLASK? */ X rspeak_(i); X/* !READ FLASK. */ X return ret_val; X XL52200: X if (prsvec_1.prsa != vindex_1.throww || prsvec_1.prso != oindex_1.rdice || X prsvec_1.prsi != oindex_1.pool) { X goto L52300; X } X newsta_(oindex_1.pool, 280, 0, 0, 0); X/* !VANISH POOL. */ X objcts_1.oflag1[oindex_1.saffr - 1] |= VISIBT; X return ret_val; X XL52300: X if (play_1.here != rindex_1.alice && play_1.here != rindex_1.alism && X play_1.here != rindex_1.alitr) { X goto L10; X } X if (prsvec_1.prsa != vindex_1.eatw && prsvec_1.prsa != vindex_1.throww || X prsvec_1.prso != oindex_1.orice) { X goto L52400; X } X newsta_(oindex_1.orice, 0, 0, 0, 0); X/* !VANISH ORANGE ICE. */ X rooms_1.rflag[play_1.here - 1] |= RMUNG; X rrand[play_1.here - 1] = 281; X jigsup_(282); X/* !VANISH ADVENTURER. */ X return ret_val; X XL52400: X if (prsvec_1.prsa != vindex_1.eatw || prsvec_1.prso != oindex_1.blice) { X goto L10; X } X newsta_(oindex_1.blice, 283, 0, 0, 0); X/* !VANISH BLUE ICE. */ X if (play_1.here != rindex_1.alism) { X goto L52500; X } X/* !IN REDUCED ROOM? */ X objcts_1.oflag1[oindex_1.robot - 1] |= VISIBT; X io = play_1.here; X ret_val = moveto_(rindex_1.alice, play_1.winner); X iz = 0; X ir = rindex_1.alice; X X/* Do a size change, common loop used also by code at 51000 */ X XL52405: X i__1 = objcts_1.olnt; X for (i = 1; i <= i__1; ++i) { X/* !ENLARGE WORLD. */ X if (objcts_1.oroom[i - 1] != io || objcts_1.osize[i - 1] == 10000) { X goto L52450; X } X objcts_1.oroom[i - 1] = ir; X objcts_1.osize[i - 1] *= iz; XL52450: X ; X } X return ret_val; X XL52500: X jigsup_(284); X/* !ENLARGED IN WRONG ROOM. */ X return ret_val; X X/* O123-- BRICK */ X XL54000: X if (prsvec_1.prsa != vindex_1.burnw) { X goto L10; X } X/* !BURN? */ X jigsup_(150); X/* !BOOM */ X/* ! */ X return ret_val; X X/* O124-- MYSELF */ X XL55000: X if (prsvec_1.prsa != vindex_1.givew) { X goto L55100; X } X/* !GIVE? */ X newsta_(prsvec_1.prso, 2, 0, 0, aindex_1.player); X/* !DONE. */ X return ret_val; X XL55100: X if (prsvec_1.prsa != vindex_1.takew) { X goto L55200; X } X/* !TAKE? */ X rspeak_(286); X/* !JOKE. */ X return ret_val; X XL55200: X if (prsvec_1.prsa != vindex_1.killw && prsvec_1.prsa != vindex_1.mungw) { X goto L10; X } X jigsup_(287); X/* !KILL, NO JOKE. */ X return ret_val; X/* OAPPLI, PAGE 10 */ X X/* O125-- PANELS INSIDE MIRROR */ X XL56000: X if (prsvec_1.prsa != vindex_1.pushw) { X goto L10; X } X/* !PUSH? */ X if (findex_1.poleuf != 0) { X goto L56100; X } X/* !SHORT POLE UP? */ X i = 731; X/* !NO, WONT BUDGE. */ X if (findex_1.mdir % 180 == 0) { X i = 732; X } X/* !DIFF MSG IF N-S. */ X rspeak_(i); X/* !TELL WONT MOVE. */ X return ret_val; X XL56100: X if (findex_1.mloc != rindex_1.mrg) { X goto L56200; X } X/* !IN GDN ROOM? */ X rspeak_(733); X/* !YOU LOSE. */ X jigsup_(685); X return ret_val; X XL56200: X i = 831; X/* !ROTATE L OR R. */ X if (prsvec_1.prso == oindex_1.rdwal || prsvec_1.prso == oindex_1.ylwal) { X i = 830; X } X rspeak_(i); X/* !TELL DIRECTION. */ X findex_1.mdir = (findex_1.mdir + 45 + (i - 830) * 270) % 360; X/* !CALCULATE NEW DIR. */ X i__1 = findex_1.mdir / 45 + 695; X rspsub_(734, i__1); X/* !TELL NEW DIR. */ X if (findex_1.wdopnf) { X rspeak_(730); X } X/* !IF PANEL OPEN, CLOSE. */ X findex_1.wdopnf = FALSE_; X return ret_val; X/* !DONE. */ X X/* O126-- ENDS INSIDE MIRROR */ X XL57000: X if (prsvec_1.prsa != vindex_1.pushw) { X goto L10; X } X/* !PUSH? */ X if (findex_1.mdir % 180 == 0) { X goto L57100; X } X/* !MIRROR N-S? */ X rspeak_(735); X/* !NO, WONT BUDGE. */ X return ret_val; X XL57100: X if (prsvec_1.prso != oindex_1.pindr) { X goto L57300; X } X/* !PUSH PINE WALL? */ X if (findex_1.mloc == rindex_1.mrc && findex_1.mdir == 180 || X findex_1.mloc == rindex_1.mrd && findex_1.mdir == 0 || X findex_1.mloc == rindex_1.mrg) { X goto L57200; X } X rspeak_(736); X/* !NO, OPENS. */ X findex_1.wdopnf = TRUE_; X/* !INDICATE OPEN. */ X cevent_1.cflag[cindex_1.cevpin - 1] = TRUE_; X/* !TIME OPENING. */ X cevent_1.ctick[cindex_1.cevpin - 1] = 5; X return ret_val; X XL57200: X rspeak_(737); X/* !GDN SEES YOU, DIE. */ X jigsup_(685); X return ret_val; X XL57300: X nloc = findex_1.mloc - 1; X/* !NEW LOC IF SOUTH. */ X if (findex_1.mdir == 0) { X nloc = findex_1.mloc + 1; X } X/* !NEW LOC IF NORTH. */ X if (nloc >= rindex_1.mra && nloc <= rindex_1.mrd) { X goto L57400; X } X rspeak_(738); X/* !HAVE REACHED END. */ X return ret_val; X XL57400: X i = 699; X/* !ASSUME SOUTH. */ X if (findex_1.mdir == 0) { X i = 695; X } X/* !NORTH. */ X j = 739; X/* !ASSUME SMOOTH. */ X if (findex_1.poleuf != 0) { X j = 740; X } X/* !POLE UP, WOBBLES. */ X rspsub_(j, i); X/* !DESCRIBE. */ X findex_1.mloc = nloc; X if (findex_1.mloc != rindex_1.mrg) { X return ret_val; X } X/* !NOW IN GDN ROOM? */ X X if (findex_1.poleuf != 0) { X goto L57500; X } X/* !POLE UP, GDN SEES. */ X if (findex_1.mropnf || findex_1.wdopnf) { X goto L57600; X } X/* !DOOR OPEN, GDN SEES. */ X if (findex_1.mr1f && findex_1.mr2f) { X return ret_val; X } X/* !MIRRORS INTACT, OK. */ X rspeak_(742); X/* !MIRRORS BROKEN, DIE. */ X jigsup_(743); X return ret_val; X XL57500: X rspeak_(741); X/* !POLE UP, DIE. */ X jigsup_(743); X return ret_val; X XL57600: X rspeak_(744); X/* !DOOR OPEN, DIE. */ X jigsup_(743); X return ret_val; X/* OAPPLI, PAGE 11 */ X X/* O127-- GLOBAL GUARDIANS */ X XL58000: X if (prsvec_1.prsa != vindex_1.attacw && prsvec_1.prsa != vindex_1.killw && X prsvec_1.prsa != vindex_1.mungw) { X goto L58100; X } X jigsup_(745); X/* !LOSE. */ X return ret_val; X XL58100: X if (prsvec_1.prsa != vindex_1.hellow) { X goto L10; X } X/* !HELLO? */ X rspeak_(746); X/* !NO REPLY. */ X return ret_val; X X/* O128-- GLOBAL MASTER */ X XL59000: X if (prsvec_1.prsa != vindex_1.attacw && prsvec_1.prsa != vindex_1.killw && X prsvec_1.prsa != vindex_1.mungw) { X goto L59100; X } X jigsup_(747); X/* !BAD IDEA. */ X return ret_val; X XL59100: X if (prsvec_1.prsa != vindex_1.takew) { X goto L10; X } X/* !TAKE? */ X rspeak_(748); X/* !JOKE. */ X return ret_val; X X/* O129-- NUMERAL FIVE (FOR JOKE) */ X XL60000: X if (prsvec_1.prsa != vindex_1.takew) { X goto L10; X } X/* !TAKE FIVE? */ X rspeak_(419); X/* !TIME PASSES. */ X for (i = 1; i <= 3; ++i) { X/* !WAIT A WHILE. */ X if (clockd_()) { X return ret_val; X } X/* L60100: */ X } X return ret_val; X X/* O130-- CRYPT FUNCTION */ X XL61000: X if (! findex_1.endgmf) { X goto L45000; X } X/* !IF NOT EG, DIE. */ X if (prsvec_1.prsa != vindex_1.openw) { X goto L61100; X } X/* !OPEN? */ X i = 793; X if ((objcts_1.oflag2[oindex_1.tomb - 1] & OPENBT) != 0) { X i = 794; X } X rspeak_(i); X objcts_1.oflag2[oindex_1.tomb - 1] |= OPENBT; X return ret_val; X XL61100: X if (prsvec_1.prsa != vindex_1.closew) { X goto L45000; X } X/* !CLOSE? */ X i = 795; X if ((objcts_1.oflag2[oindex_1.tomb - 1] & OPENBT) != 0) { X i = 796; X } X rspeak_(i); X objcts_1.oflag2[oindex_1.tomb - 1] &= ~ OPENBT; X if (play_1.here == rindex_1.crypt) { X cevent_1.ctick[cindex_1.cevste - 1] = 3; X } X/* !IF IN CRYPT, START EG. */ X return ret_val; X/* OAPPLI, PAGE 12 */ X X/* O131-- GLOBAL LADDER */ X XL62000: X if (puzzle_1.cpvec[findex_1.cphere] == -2 || puzzle_1.cpvec[ X findex_1.cphere - 2] == -3) { X goto L62100; X } X rspeak_(865); X/* !NO, LOSE. */ X return ret_val; X XL62100: X if (prsvec_1.prsa == vindex_1.clmbw || prsvec_1.prsa == vindex_1.clmbuw) { X X goto L62200; X } X rspeak_(866); X/* !CLIMB IT? */ X return ret_val; X XL62200: X if (findex_1.cphere == 10 && puzzle_1.cpvec[findex_1.cphere] == -2) { X goto L62300; X } X rspeak_(867); X/* !NO, HIT YOUR HEAD. */ X return ret_val; X XL62300: X f = moveto_(rindex_1.cpant, play_1.winner); X/* !TO ANTEROOM. */ X f = rmdesc_(3); X/* !DESCRIBE. */ X return ret_val; X X} /* oappli_ */ END_OF_FILE if test 24355 -ne `wc -c <'objcts.c'`; then echo shar: \"'objcts.c'\" unpacked with wrong size! fi # end of 'objcts.c' fi if test -f 'verbs.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'verbs.c'\" else echo shar: Extracting \"'verbs.c'\" \(25958 characters\) sed "s/^X//" >'verbs.c' <<'END_OF_FILE' X/* VAPPLI- MAIN VERB PROCESSING ROUTINE */ X X/*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/ X/* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */ X/* WRITTEN BY R. M. SUPNIK */ X X#include "funcs.h" X#include "vars.h" X Xlogical vappli_(ri) Xinteger ri; X{ X /* Initialized data */ X X const integer mxnop = 39; X const integer mxsmp = 99; X X /* System generated locals */ X integer i__1; X logical ret_val; X X /* Local variables */ X integer melee; X logical f; X integer i, j, av; X integer rmk; X integer odi2 = 0, odo2 = 0; X X ret_val = TRUE_; X/* !ASSUME WINS. */ X X if (prsvec_1.prso > 220) { X goto L5; X } X X if (prsvec_1.prso != 0) { X odo2 = objcts_1.odesc2[prsvec_1.prso - 1]; X } X/* !SET UP DESCRIPTORS. */ XL5: X if (prsvec_1.prsi != 0) { X odi2 = objcts_1.odesc2[prsvec_1.prsi - 1]; X } X av = advs_1.avehic[play_1.winner - 1]; X rmk = rnd_(6) + 372; X/* !REMARK FOR HACK-HACKS. */ X X if (ri == 0) { X goto L10; X } X/* !ZERO IS FALSE. */ X if (ri <= mxnop) { X return ret_val; X } X/* !NOP? */ X if (ri <= mxsmp) { X goto L100; X } X/* !SIMPLE VERB? */ X switch (ri - mxsmp) { X case 1: goto L18000; X case 2: goto L20000; X case 3: goto L22000; X case 4: goto L23000; X case 5: goto L24000; X case 6: goto L25000; X case 7: goto L26000; X case 8: goto L27000; X case 9: goto L28000; X case 10: goto L29000; X case 11: goto L30000; X case 12: goto L31000; X case 13: goto L32000; X case 14: goto L33000; X case 15: goto L34000; X case 16: goto L35000; X case 17: goto L36000; X case 18: goto L38000; X case 19: goto L39000; X case 20: goto L40000; X case 21: goto L41000; X case 22: goto L42000; X case 23: goto L43000; X case 24: goto L44000; X case 25: goto L45000; X case 26: goto L46000; X case 27: goto L47000; X case 28: goto L48000; X case 29: goto L49000; X case 30: goto L50000; X case 31: goto L51000; X case 32: goto L52000; X case 33: goto L53000; X case 34: goto L55000; X case 35: goto L56000; X case 36: goto L58000; X case 37: goto L59000; X case 38: goto L60000; X case 39: goto L63000; X case 40: goto L64000; X case 41: goto L65000; X case 42: goto L66000; X case 43: goto L68000; X case 44: goto L69000; X case 45: goto L70000; X case 46: goto L71000; X case 47: goto L72000; X case 48: goto L73000; X case 49: goto L74000; X case 50: goto L77000; X case 51: goto L78000; X case 52: goto L80000; X case 53: goto L81000; X case 54: goto L82000; X case 55: goto L83000; X case 56: goto L84000; X case 57: goto L85000; X case 58: goto L86000; X case 59: goto L87000; X case 60: goto L88000; X } X bug_(7, ri); X X/* ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE. */ X XL10: X ret_val = FALSE_; X/* !LOSE. */ X return ret_val; X X/* SIMPLE VERBS ARE HANDLED EXTERNALLY. */ X XL100: X ret_val = sverbs_(ri); X return ret_val; X/* VAPPLI, PAGE 3 */ X X/* V100-- READ. OUR FIRST REAL VERB. */ X XL18000: X if (lit_(play_1.here)) { X goto L18100; X } X/* !ROOM LIT? */ X rspeak_(356); X/* !NO, CANT READ. */ X return ret_val; X XL18100: X if (prsvec_1.prsi == 0) { X goto L18200; X } X/* !READ THROUGH OBJ? */ X if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TRANBT) != 0) { X goto L18200; X } X rspsub_(357, odi2); X/* !NOT TRANSPARENT. */ X return ret_val; X XL18200: X if ((objcts_1.oflag1[prsvec_1.prso - 1] & READBT) != 0) { X goto L18300; X } X rspsub_(358, odo2); X/* !NOT READABLE. */ X return ret_val; X XL18300: X if (! objact_()) { X rspeak_(objcts_1.oread[prsvec_1.prso - 1]); X } X return ret_val; X X/* V101-- MELT. UNLESS OBJECT HANDLES, JOKE. */ X XL20000: X if (! objact_()) { X rspsub_(361, odo2); X } X return ret_val; X X/* V102-- INFLATE. WORKS ONLY WITH BOATS. */ X XL22000: X if (! objact_()) { X rspeak_(368); X } X/* !OBJ HANDLE? */ X return ret_val; X X/* V103-- DEFLATE. */ X XL23000: X if (! objact_()) { X rspeak_(369); X } X/* !OBJ HANDLE? */ X return ret_val; X/* VAPPLI, PAGE 4 */ X X/* V104-- ALARM. IF SLEEPING, WAKE HIM UP. */ X XL24000: X if ((objcts_1.oflag2[prsvec_1.prso - 1] & SLEPBT) == 0) { X goto L24100; X } X ret_val = objact_(); X/* !SLEEPING, LET OBJ DO. */ X return ret_val; X XL24100: X rspsub_(370, odo2); X/* !JOKE. */ X return ret_val; X X/* V105-- EXORCISE. OBJECTS HANDLE. */ X XL25000: X f = objact_(); X/* !OBJECTS HANDLE. */ X return ret_val; X X/* V106-- PLUG. LET OBJECTS HANDLE. */ X XL26000: X if (! objact_()) { X rspeak_(371); X } X return ret_val; X X/* V107-- KICK. IF OBJECT IGNORES, JOKE. */ X XL27000: X if (! objact_()) { X rspsb2_(378, odo2, rmk); X } X return ret_val; X X/* V108-- WAVE. SAME. */ X XL28000: X if (! objact_()) { X rspsb2_(379, odo2, rmk); X } X return ret_val; X X/* V109,V110-- RAISE, LOWER. SAME. */ X XL29000: XL30000: X if (! objact_()) { X rspsb2_(380, odo2, rmk); X } X return ret_val; X X/* V111-- RUB. SAME. */ X XL31000: X if (! objact_()) { X rspsb2_(381, odo2, rmk); X } X return ret_val; X X/* V112-- PUSH. SAME. */ X XL32000: X if (! objact_()) { X rspsb2_(382, odo2, rmk); X } X return ret_val; X/* VAPPLI, PAGE 5 */ X X/* V113-- UNTIE. IF OBJECT IGNORES, JOKE. */ X XL33000: X if (objact_()) { X return ret_val; X } X/* !OBJECT HANDLE? */ X i = 383; X/* !NO, NOT TIED. */ X if ((objcts_1.oflag2[prsvec_1.prso - 1] & TIEBT) == 0) { X i = 384; X } X rspeak_(i); X return ret_val; X X/* V114-- TIE. NEVER REALLY WORKS. */ X XL34000: X if ((objcts_1.oflag2[prsvec_1.prso - 1] & TIEBT) != 0) { X goto L34100; X } X rspeak_(385); X/* !NOT TIEABLE. */ X return ret_val; X XL34100: X if (! objact_()) { X rspsub_(386, odo2); X } X/* !JOKE. */ X return ret_val; X X/* V115-- TIE UP. NEVER REALLY WORKS. */ X XL35000: X if ((objcts_1.oflag2[prsvec_1.prsi - 1] & TIEBT) != 0) { X goto L35100; X } X rspsub_(387, odo2); X/* !NOT TIEABLE. */ X return ret_val; X XL35100: X i = 388; X/* !ASSUME VILLAIN. */ X if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) { X i = 389; X } X rspsub_(i, odo2); X/* !JOKE. */ X return ret_val; X X/* V116-- TURN. OBJECT MUST HANDLE. */ X XL36000: X if ((objcts_1.oflag1[prsvec_1.prso - 1] & TURNBT) != 0) { X goto L36100; X } X rspeak_(390); X/* !NOT TURNABLE. */ X return ret_val; X XL36100: X if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TOOLBT) != 0) { X goto L36200; X } X rspsub_(391, odi2); X/* !NOT A TOOL. */ X return ret_val; X XL36200: X ret_val = objact_(); X/* !LET OBJECT HANDLE. */ X return ret_val; X X/* V117-- BREATHE. BECOMES INFLATE WITH LUNGS. */ X XL38000: X prsvec_1.prsa = vindex_1.inflaw; X prsvec_1.prsi = oindex_1.lungs; X goto L22000; X/* !HANDLE LIKE INFLATE. */ X X/* V118-- KNOCK. MOSTLY JOKE. */ X XL39000: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X i = 394; X/* !JOKE FOR DOOR. */ X if ((objcts_1.oflag1[prsvec_1.prso - 1] & DOORBT) == 0) { X i = 395; X } X rspsub_(i, odo2); X/* !JOKE FOR NONDOORS TOO. */ X return ret_val; X X/* V119-- LOOK. */ X XL40000: X if (prsvec_1.prso != 0) { X goto L41500; X } X/* !SOMETHING TO LOOK AT? */ X ret_val = rmdesc_(3); X/* !HANDLED BY RMDESC. */ X return ret_val; X X/* V120-- EXAMINE. */ X XL41000: X if (prsvec_1.prso != 0) { X goto L41500; X } X/* !SOMETHING TO EXAMINE? */ X ret_val = rmdesc_(0); X/* !HANDLED BY RMDESC. */ X return ret_val; X XL41500: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X i = objcts_1.oread[prsvec_1.prso - 1]; X/* !GET READING MATERIAL. */ X if (i != 0) { X rspeak_(i); X } X/* !OUTPUT IF THERE, */ X if (i == 0) { X rspsub_(429, odo2); X } X/* !OTHERWISE DEFAULT. */ X prsvec_1.prsa = vindex_1.foow; X/* !DEFUSE ROOM PROCESSORS. */ X return ret_val; X X/* V121-- SHAKE. IF HOLLOW OBJECT, SOME ACTION. */ X XL42000: X if (objact_()) { X return ret_val; X } X/* !OBJECT HANDLE? */ X if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) { X goto L42100; X } X rspeak_(371); X/* !JOKE FOR VILLAINS. */ X return ret_val; X XL42100: X if (qempty_(prsvec_1.prso) || (objcts_1.oflag1[prsvec_1.prso - 1] & X TAKEBT) == 0) { X goto L10; X } X if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0) { X goto L42300; X } X/* !OPEN? SPILL. */ X rspsub_(396, odo2); X/* !NO, DESCRIBE NOISE. */ X return ret_val; X XL42300: X rspsub_(397, odo2); X/* !SPILL THE WORKS. */ X i__1 = objcts_1.olnt; X for (i = 1; i <= i__1; ++i) { X/* !SPILL CONTENTS. */ X if (objcts_1.ocan[i - 1] != prsvec_1.prso) { X goto L42500; X } X/* !INSIDE? */ X objcts_1.oflag2[i - 1] |= TCHBT; X if (av == 0) { X goto L42400; X } X/* !IN VEHICLE? */ X newsta_(i, 0, 0, av, 0); X/* !YES, SPILL IN THERE. */ X goto L42500; X XL42400: X newsta_(i, 0, play_1.here, 0, 0); X/* !NO, SPILL ON FLOOR, */ X if (i == oindex_1.water) { X newsta_(i, 133, 0, 0, 0); X } X/* !BUT WATER DISAPPEARS. */ XL42500: X ; X } X return ret_val; X X/* V122-- MOVE. MOSTLY JOKES. */ X XL43000: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X i = 398; X/* !ASSUME NOT HERE. */ X if (qhere_(prsvec_1.prso, play_1.here)) { X i = 399; X } X rspsub_(i, odo2); X/* !JOKE. */ X return ret_val; X/* VAPPLI, PAGE 6 */ X X/* V123-- TURN ON. */ X XL44000: X f = lit_(play_1.here); X/* !RECORD IF LIT. */ X if (objact_()) { X goto L44300; X } X/* !OBJ HANDLE? */ X if ((objcts_1.oflag1[prsvec_1.prso - 1] & LITEBT) != 0 && X objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) { X goto L44100; X } X rspeak_(400); X/* !CANT DO IT. */ X return ret_val; X XL44100: X if ((objcts_1.oflag1[prsvec_1.prso - 1] & ONBT) == 0) { X goto L44200; X } X rspeak_(401); X/* !ALREADY ON. */ X return ret_val; X XL44200: X objcts_1.oflag1[prsvec_1.prso - 1] |= ONBT; X rspsub_(404, odo2); XL44300: X if (! f && lit_(play_1.here)) { X f = rmdesc_(0); X } X/* !ROOM NEWLY LIT. */ X return ret_val; X X/* V124-- TURN OFF. */ X XL45000: X if (objact_()) { X goto L45300; X } X/* !OBJ HANDLE? */ X if ((objcts_1.oflag1[prsvec_1.prso - 1] & LITEBT) != 0 && X objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) { X goto L45100; X } X rspeak_(402); X/* !CANT DO IT. */ X return ret_val; X XL45100: X if ((objcts_1.oflag1[prsvec_1.prso - 1] & ONBT) != 0) { X goto L45200; X } X rspeak_(403); X/* !ALREADY OFF. */ X return ret_val; X XL45200: X objcts_1.oflag1[prsvec_1.prso - 1] &= ~ ONBT; X rspsub_(405, odo2); XL45300: X if (! lit_(play_1.here)) { X rspeak_(406); X } X/* !MAY BE DARK. */ X return ret_val; X X/* V125-- OPEN. A FINE MESS. */ X XL46000: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) != 0) { X goto L46100; X } XL46050: X rspsub_(407, odo2); X/* !NOT OPENABLE. */ X return ret_val; X XL46100: X if (objcts_1.ocapac[prsvec_1.prso - 1] != 0) { X goto L46200; X } X rspsub_(408, odo2); X/* !NOT OPENABLE. */ X return ret_val; X XL46200: X if (! ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0)) { X goto L46225; X } X rspeak_(412); X/* !ALREADY OPEN. */ X return ret_val; X XL46225: X objcts_1.oflag2[prsvec_1.prso - 1] |= OPENBT; X if ((objcts_1.oflag1[prsvec_1.prso - 1] & TRANBT) != 0 || X qempty_(prsvec_1.prso)) { X goto L46300; X } X princo_(prsvec_1.prso, 410); X/* !PRINT CONTENTS. */ X return ret_val; X XL46300: X rspeak_(409); X/* !DONE */ X return ret_val; X X/* V126-- CLOSE. */ X XL47000: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) == 0) { X goto L46050; X } X if (objcts_1.ocapac[prsvec_1.prso - 1] != 0) { X goto L47100; X } X rspsub_(411, odo2); X/* !NOT CLOSABLE. */ X return ret_val; X XL47100: X if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0) { X goto L47200; X } X/* !OPEN? */ X rspeak_(413); X/* !NO, JOKE. */ X return ret_val; X XL47200: X objcts_1.oflag2[prsvec_1.prso - 1] &= ~ OPENBT; X rspeak_(414); X/* !DONE. */ X return ret_val; X/* VAPPLI, PAGE 7 */ X X/* V127-- FIND. BIG MEGILLA. */ X XL48000: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X i = 415; X/* !DEFAULT CASE. */ X if (qhere_(prsvec_1.prso, play_1.here)) { X goto L48300; X } X/* !IN ROOM? */ X if (objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) { X goto L48200; X } X/* !ON WINNER? */ X j = objcts_1.ocan[prsvec_1.prso - 1]; X/* !DOWN ONE LEVEL. */ X if (j == 0) { X goto L10; X } X if ((objcts_1.oflag1[j - 1] & TRANBT) == 0 && (! (( X objcts_1.oflag2[j - 1] & OPENBT) != 0) || ( X objcts_1.oflag1[j - 1] & DOORBT + CONTBT) == 0)) X { X goto L10; X } X i = 417; X/* !ASSUME IN ROOM. */ X if (qhere_(j, play_1.here)) { X goto L48100; X } X if (objcts_1.oadv[j - 1] != play_1.winner) { X goto L10; X } X/* !NOT HERE OR ON PERSON. */ X i = 418; XL48100: X rspsub_(i, objcts_1.odesc2[j - 1]); X/* !DESCRIBE FINDINGS. */ X return ret_val; X XL48200: X i = 416; XL48300: X rspsub_(i, odo2); X/* !DESCRIBE FINDINGS. */ X return ret_val; X X/* V128-- WAIT. RUN CLOCK DEMON. */ X XL49000: X rspeak_(419); X/* !TIME PASSES. */ X for (i = 1; i <= 3; ++i) { X if (clockd_()) { X return ret_val; X } X/* L49100: */ X } X return ret_val; X X/* V129-- SPIN. */ X/* V159-- TURN TO. */ X XL50000: XL88000: X if (! objact_()) { X rspeak_(663); X } X/* !IF NOT OBJ, JOKE. */ X return ret_val; X X/* V130-- BOARD. WORKS WITH VEHICLES. */ X XL51000: X if ((objcts_1.oflag2[prsvec_1.prso - 1] & VEHBT) != 0) { X goto L51100; X } X rspsub_(421, odo2); X/* !NOT VEHICLE, JOKE. */ X return ret_val; X XL51100: X if (qhere_(prsvec_1.prso, play_1.here)) { X goto L51200; X } X/* !HERE? */ X rspsub_(420, odo2); X/* !NO, JOKE. */ X return ret_val; X XL51200: X if (av == 0) { X goto L51300; X } X/* !ALREADY GOT ONE? */ X rspsub_(422, odo2); X/* !YES, JOKE. */ X return ret_val; X XL51300: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X rspsub_(423, odo2); X/* !DESCRIBE. */ X advs_1.avehic[play_1.winner - 1] = prsvec_1.prso; X if (play_1.winner != aindex_1.player) { X objcts_1.ocan[advs_1.aobj[play_1.winner - 1] - 1] = prsvec_1.prso; X } X return ret_val; X X/* V131-- DISEMBARK. */ X XL52000: X if (av == prsvec_1.prso) { X goto L52100; X } X/* !FROM VEHICLE? */ X rspeak_(424); X/* !NO, JOKE. */ X return ret_val; X XL52100: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X if ((rooms_1.rflag[play_1.here - 1] & RLAND) != 0) { X goto L52200; X } X rspeak_(425); X/* !NOT ON LAND. */ X return ret_val; X XL52200: X advs_1.avehic[play_1.winner - 1] = 0; X rspeak_(426); X if (play_1.winner != aindex_1.player) { X newsta_(advs_1.aobj[play_1.winner - 1], 0, play_1.here, 0, 0); X } X return ret_val; X X/* V132-- TAKE. HANDLED EXTERNALLY. */ X XL53000: X ret_val = take_(1); X return ret_val; X X/* V133-- INVENTORY. PROCESSED EXTERNALLY. */ X XL55000: X invent_(play_1.winner); X return ret_val; X/* VAPPLI, PAGE 8 */ X X/* V134-- FILL. STRANGE DOINGS WITH WATER. */ X XL56000: X if (prsvec_1.prsi != 0) { X goto L56050; X } X/* !ANY OBJ SPECIFIED? */ X if ((rooms_1.rflag[play_1.here - 1] & RWATER + RFILL) != X 0) { X goto L56025; X } X rspeak_(516); X/* !NOTHING TO FILL WITH. */ X prsvec_1.prswon = FALSE_; X/* !YOU LOSE. */ X return ret_val; X XL56025: X prsvec_1.prsi = oindex_1.gwate; X/* !USE GLOBAL WATER. */ XL56050: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X if (prsvec_1.prsi != oindex_1.gwate && prsvec_1.prsi != oindex_1.water) { X rspsb2_(444, odi2, odo2); X } X return ret_val; X X/* V135,V136-- EAT/DRINK */ X XL58000: XL59000: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X if (prsvec_1.prso == oindex_1.gwate) { X goto L59500; X } X/* !DRINK GLOBAL WATER? */ X if (! ((objcts_1.oflag1[prsvec_1.prso - 1] & FOODBT) != 0)) { X goto L59400; X } X/* !EDIBLE? */ X if (objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) { X goto L59200; X } X/* !YES, ON WINNER? */ XL59100: X rspsub_(454, odo2); X/* !NOT ACCESSIBLE. */ X return ret_val; X XL59200: X if (prsvec_1.prsa == vindex_1.drinkw) { X goto L59300; X } X/* !DRINK FOOD? */ X newsta_(prsvec_1.prso, 455, 0, 0, 0); X/* !NO, IT DISAPPEARS. */ X return ret_val; X XL59300: X rspeak_(456); X/* !YES, JOKE. */ X return ret_val; X XL59400: X if (! ((objcts_1.oflag1[prsvec_1.prso - 1] & DRNKBT) != 0)) { X goto L59600; X } X/* !DRINKABLE? */ X if (objcts_1.ocan[prsvec_1.prso - 1] == 0) { X goto L59100; X } X/* !YES, IN SOMETHING? */ X if (objcts_1.oadv[objcts_1.ocan[prsvec_1.prso - 1] - 1] != play_1.winner) X { X goto L59100; X } X if ((objcts_1.oflag2[objcts_1.ocan[prsvec_1.prso - 1] - 1] & X OPENBT) != 0) { X goto L59500; X } X/* !CONT OPEN? */ X rspeak_(457); X/* !NO, JOKE. */ X return ret_val; X XL59500: X newsta_(prsvec_1.prso, 458, 0, 0, 0); X/* !GONE. */ X return ret_val; X XL59600: X rspsub_(453, odo2); X/* !NOT FOOD OR DRINK. */ X return ret_val; X X/* V137-- BURN. COMPLICATED. */ X XL60000: X if ((objcts_1.oflag1[prsvec_1.prsi - 1] & FLAMBT + X LITEBT + ONBT) != FLAMBT + X LITEBT + ONBT) { X goto L60400; X } X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X if (objcts_1.ocan[prsvec_1.prso - 1] != oindex_1.recep) { X goto L60050; X } X/* !BALLOON? */ X if (oappli_(objcts_1.oactio[oindex_1.ballo - 1], 0)) { X return ret_val; X } X/* !DID IT HANDLE? */ XL60050: X if ((objcts_1.oflag1[prsvec_1.prso - 1] & BURNBT) == 0) { X goto L60300; X } X if (objcts_1.oadv[prsvec_1.prso - 1] != play_1.winner) { X goto L60100; X } X/* !CARRYING IT? */ X rspsub_(459, odo2); X jigsup_(460); X return ret_val; X XL60100: X j = objcts_1.ocan[prsvec_1.prso - 1]; X/* !GET CONTAINER. */ X if (qhere_(prsvec_1.prso, play_1.here) || av != 0 && j == av) { X goto L60200; X } X if (j == 0) { X goto L60150; X } X/* !INSIDE? */ X if (! ((objcts_1.oflag2[j - 1] & OPENBT) != 0)) { X goto L60150; X } X/* !OPEN? */ X if (qhere_(j, play_1.here) || av != 0 && objcts_1.ocan[j - 1] == av) { X goto L60200; X } XL60150: X rspeak_(461); X/* !CANT REACH IT. */ X return ret_val; X XL60200: X rspsub_(462, odo2); X/* !BURN IT. */ X newsta_(prsvec_1.prso, 0, 0, 0, 0); X return ret_val; X XL60300: X rspsub_(463, odo2); X/* !CANT BURN IT. */ X return ret_val; X XL60400: X rspsub_(301, odi2); X/* !CANT BURN IT WITH THAT. */ X return ret_val; X/* VAPPLI, PAGE 9 */ X X/* V138-- MUNG. GO TO COMMON ATTACK CODE. */ X XL63000: X i = 466; X/* !CHOOSE PHRASE. */ X if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) != 0) { X goto L66100; X } X if (! objact_()) { X rspsb2_(466, odo2, rmk); X } X return ret_val; X X/* V139-- KILL. GO TO COMMON ATTACK CODE. */ X XL64000: X i = 467; X/* !CHOOSE PHRASE. */ X goto L66100; X X/* V140-- SWING. INVERT OBJECTS, FALL THRU TO ATTACK. */ X XL65000: X j = prsvec_1.prso; X/* !INVERT. */ X prsvec_1.prso = prsvec_1.prsi; X prsvec_1.prsi = j; X j = odo2; X odo2 = odi2; X odi2 = j; X prsvec_1.prsa = vindex_1.attacw; X/* !FOR OBJACT. */ X X/* V141-- ATTACK. FALL THRU TO ATTACK CODE. */ X XL66000: X i = 468; X X/* COMMON MUNG/ATTACK/SWING/KILL CODE. */ X XL66100: X if (prsvec_1.prso != 0) { X goto L66200; X } X/* !ANYTHING? */ X rspeak_(469); X/* !NO, JOKE. */ X return ret_val; X XL66200: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) != 0) { X goto L66300; X } X if ((objcts_1.oflag1[prsvec_1.prso - 1] & VICTBT) == 0) { X rspsub_(470, odo2); X } X return ret_val; X XL66300: X j = 471; X/* !ASSUME NO WEAPON. */ X if (prsvec_1.prsi == 0) { X goto L66500; X } X if ((objcts_1.oflag2[prsvec_1.prsi - 1] & WEAPBT) == 0) { X goto L66400; X } X melee = 1; X/* !ASSUME SWORD. */ X if (prsvec_1.prsi != oindex_1.sword) { X melee = 2; X } X/* !MUST BE KNIFE. */ X i = blow_(aindex_1.player, prsvec_1.prso, melee, 1, 0); X/* !STRIKE BLOW. */ X return ret_val; X XL66400: X j = 472; X/* !NOT A WEAPON. */ XL66500: X rspsb2_(i, odo2, j); X/* !JOKE. */ X return ret_val; X/* VAPPLI, PAGE 10 */ X X/* V142-- WALK. PROCESSED EXTERNALLY. */ X XL68000: X ret_val = walk_(); X return ret_val; X X/* V143-- TELL. PROCESSED IN GAME. */ X XL69000: X rspeak_(603); X return ret_val; X X/* V144-- PUT. PROCESSED EXTERNALLY. */ X XL70000: X ret_val = put_(1); X return ret_val; X X/* V145,V146,V147,V148-- DROP/GIVE/POUR/THROW */ X XL71000: XL72000: XL73000: XL74000: X ret_val = drop_(0); X return ret_val; X X/* V149-- SAVE */ X XL77000: X if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) == 0) { X goto L77100; X } X rspeak_(828); X/* !NO SAVES IN ENDGAME. */ X return ret_val; X XL77100: X savegm_(); X return ret_val; X X/* V150-- RESTORE */ X XL78000: X if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) == 0) { X goto L78100; X } X rspeak_(829); X/* !NO RESTORES IN ENDGAME. */ X return ret_val; X XL78100: X rstrgm_(); X return ret_val; X/* VAPPLI, PAGE 11 */ X X/* V151-- HELLO */ X XL80000: X if (prsvec_1.prso != 0) { X goto L80100; X } X/* !ANY OBJ? */ X i__1 = rnd_(4) + 346; X rspeak_(i__1); X/* !NO, VANILLA HELLO. */ X return ret_val; X XL80100: X if (prsvec_1.prso != oindex_1.aviat) { X goto L80200; X } X/* !HELLO AVIATOR? */ X rspeak_(350); X/* !NOTHING HAPPENS. */ X return ret_val; X XL80200: X if (prsvec_1.prso != oindex_1.sailo) { X goto L80300; X } X/* !HELLO SAILOR? */ X ++state_1.hs; X/* !COUNT. */ X i = 351; X/* !GIVE NORMAL OR */ X if (state_1.hs % 10 == 0) { X i = 352; X } X/* !RANDOM MESSAGE. */ X if (state_1.hs % 20 == 0) { X i = 353; X } X rspeak_(i); X/* !SPEAK UP. */ X return ret_val; X XL80300: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X i = 354; X/* !ASSUME VILLAIN. */ X if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT + X ACTRBT) == 0) { X i = 355; X } X rspsub_(i, odo2); X/* !HELLO THERE */ X/* ! */ X return ret_val; X X/* V152-- LOOK INTO */ X XL81000: X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X if ((objcts_1.oflag1[prsvec_1.prso - 1] & DOORBT) == 0) { X goto L81300; X } X if (! ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0)) { X goto L81200; X } X/* !OPEN? */ X rspsub_(628, odo2); X/* !OPEN DOOR- UNINTERESTING. */ X return ret_val; X XL81200: X rspsub_(525, odo2); X/* !CLOSED DOOR- CANT SEE. */ X return ret_val; X XL81300: X if ((objcts_1.oflag2[prsvec_1.prso - 1] & VEHBT) != 0) { X goto L81400; X } X if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0 || ( X objcts_1.oflag1[prsvec_1.prso - 1] & TRANBT) != 0) { X goto L81400; X } X if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) != 0) { X goto L81200; X } X rspsub_(630, odo2); X/* !CANT LOOK INSIDE. */ X return ret_val; X XL81400: X if (qempty_(prsvec_1.prso)) { X goto L81500; X } X/* !VEH OR SEE IN. EMPTY? */ X princo_(prsvec_1.prso, 573); X/* !NO, LIST CONTENTS. */ X return ret_val; X XL81500: X rspsub_(629, odo2); X/* !EMPTY. */ X return ret_val; X X/* V153-- LOOK UNDER */ X XL82000: X if (! objact_()) { X rspeak_(631); X } X/* !OBJECT HANDLE? */ X return ret_val; X/* VAPPLI, PAGE 12 */ X X/* V154-- PUMP */ X XL83000: X if (objcts_1.oroom[oindex_1.pump - 1] == play_1.here || objcts_1.oadv[ X oindex_1.pump - 1] == play_1.winner) { X goto L83100; X } X rspeak_(632); X/* !NO. */ X return ret_val; X XL83100: X prsvec_1.prsi = oindex_1.pump; X/* !BECOMES INFLATE */ X prsvec_1.prsa = vindex_1.inflaw; X/* !X WITH PUMP. */ X goto L22000; X/* !DONE. */ X X/* V155-- WIND */ X XL84000: X if (! objact_()) { X rspsub_(634, odo2); X } X/* !OBJ HANDLE? */ X return ret_val; X X/* V156-- CLIMB */ X/* V157-- CLIMB UP */ X/* V158-- CLIMB DOWN */ X XL85000: XL86000: XL87000: X i = xsrch_1.xup; X/* !ASSUME UP. */ X if (prsvec_1.prsa == vindex_1.clmbdw) { X i = xsrch_1.xdown; X } X/* !UNLESS CLIMB DN. */ X f = (objcts_1.oflag2[prsvec_1.prso - 1] & CLMBBT) != 0; X if (f && findxt_(i, play_1.here)) { X goto L87500; X } X/* !ANYTHING TO CLIMB? */ X if (objact_()) { X return ret_val; X } X/* !OBJ HANDLE? */ X i = 657; X if (f) { X i = 524; X } X/* !VARIETY OF JOKES. */ X if (! f && (prsvec_1.prso == oindex_1.wall || prsvec_1.prso >= X oindex_1.wnort && prsvec_1.prso <= oindex_1.wnort + 3)) { X i = 656; X } X rspeak_(i); X/* !JOKE. */ X return ret_val; X XL87500: X prsvec_1.prsa = vindex_1.walkw; X/* !WALK */ X prsvec_1.prso = i; X/* !IN SPECIFIED DIR. */ X ret_val = walk_(); X return ret_val; X X} /* vappli_ */ X X/* CLOCKD- CLOCK DEMON FOR INTERMOVE CLOCK EVENTS */ X X/* DECLARATIONS */ X Xlogical clockd_() X{ X /* System generated locals */ X integer i__1; X logical ret_val; X X /* Local variables */ X integer i; X X ret_val = FALSE_; X/* !ASSUME NO ACTION. */ X i__1 = cevent_1.clnt; X for (i = 1; i <= i__1; ++i) { X if (! cevent_1.cflag[i - 1] || cevent_1.ctick[i - 1] == 0) { X goto L100; X } X if (cevent_1.ctick[i - 1] < 0) { X goto L50; X } X/* !PERMANENT ENTRY? */ X --cevent_1.ctick[i - 1]; X if (cevent_1.ctick[i - 1] != 0) { X goto L100; X } X/* !TIMER EXPIRED? */ XL50: X ret_val = TRUE_; X cevapp_(cevent_1.cactio[i - 1]); X/* !DO ACTION. */ XL100: X ; X } X return ret_val; X X} /* clockd_ */ END_OF_FILE if test 25958 -ne `wc -c <'verbs.c'`; then echo shar: \"'verbs.c'\" unpacked with wrong size! fi # end of 'verbs.c' fi echo shar: End of archive 6 \(of 12\). cp /dev/null ark6isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 12 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0