1C VAPPLI- MAIN VERB PROCESSING ROUTINE 2C 3C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 4C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED 5C WRITTEN BY R. M. SUPNIK 6C 7C DECLARATIONS 8C 9 LOGICAL FUNCTION VAPPLI(RI) 10 IMPLICIT INTEGER (A-Z) 11 LOGICAL LIT,OBJACT 12 LOGICAL QEMPTY,RMDESC,CLOCKD 13 LOGICAL QOPEN,EDIBLE,DRKBLE 14 LOGICAL TAKE,PUT,DROP,WALK 15 LOGICAL QHERE,SVERBS,FINDXT,OAPPLI,F 16#include "parser.h" 17#include "gamestate.h" 18#include "state.h" 19C 20 COMMON /STAR/ MBASE,STRBIT 21#include "rooms.h" 22#include "rflag.h" 23#include "rindex.h" 24#include "xsrch.h" 25#include "objects.h" 26#include "oflags.h" 27#include "oindex.h" 28#include "advers.h" 29#include "verbs.h" 30C 31C FUNCTIONS AND DATA 32C 33 QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0 34 EDIBLE(R)=and(OFLAG1(R),FOODBT).NE.0 35 DRKBLE(R)=and(OFLAG1(R),DRNKBT).NE.0 36 DATA MXNOP/39/,MXSMP/99/ 37C VAPPLI, PAGE 2 38C 39 VAPPLI=.TRUE. 40C !ASSUME WINS. 41C 42 IF(PRSO.GT.220) GO TO 5 43C 44 IF(PRSO.NE.0) ODO2=ODESC2(PRSO) 45C !SET UP DESCRIPTORS. 465 IF(PRSI.NE.0) ODI2=ODESC2(PRSI) 47 AV=AVEHIC(WINNER) 48 RMK=372+RND(6) 49C !REMARK FOR HACK-HACKS. 50C 51 IF(RI.EQ.0) GO TO 10 52C !ZERO IS FALSE. 53 IF(RI.LE.MXNOP) RETURN 54C !NOP? 55 IF(RI.LE.MXSMP) GO TO 100 56C !SIMPLE VERB? 57 GO TO (18000,20000, 58& 22000,23000,24000,25000,26000,27000,28000,29000,30000, 59& 31000,32000,33000,34000,35000,36000, 38000,39000,40000, 60& 41000,42000,43000,44000,45000,46000,47000,48000,49000,50000, 61& 51000,52000,53000, 55000,56000, 58000,59000,60000, 62& 63000,64000,65000,66000, 68000,69000,70000, 63& 71000,72000,73000,74000, 77000,78000, 64& 80000,81000,82000,83000,84000,85000,86000,87000,88000), 65& (RI-MXSMP) 66 CALL BUG(7,RI) 67C 68C ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE. 69C 7010 VAPPLI=.FALSE. 71C !LOSE. 72 RETURN 73C 74C SIMPLE VERBS ARE HANDLED EXTERNALLY. 75C 76100 VAPPLI=SVERBS(RI) 77 RETURN 78C VAPPLI, PAGE 3 79C 80C V100-- READ. OUR FIRST REAL VERB. 81C 8218000 IF(LIT(HERE)) GO TO 18100 83C !ROOM LIT? 84 CALL RSPEAK(356) 85C !NO, CANT READ. 86 RETURN 87C 8818100 IF(PRSI.EQ.0) GO TO 18200 89C !READ THROUGH OBJ? 90 IF(and(OFLAG1(PRSI),TRANBT).NE.0) GO TO 18200 91 CALL RSPSUB(357,ODI2) 92C !NOT TRANSPARENT. 93 RETURN 94C 9518200 IF(and(OFLAG1(PRSO),READBT).NE.0) GO TO 18300 96 CALL RSPSUB(358,ODO2) 97C !NOT READABLE. 98 RETURN 99C 10018300 IF(.NOT.OBJACT(X)) CALL RSPEAK(OREAD(PRSO)) 101 RETURN 102C 103C V101-- MELT. UNLESS OBJECT HANDLES, JOKE. 104C 10520000 IF(.NOT.OBJACT(X)) CALL RSPSUB(361,ODO2) 106 RETURN 107C 108C V102-- INFLATE. WORKS ONLY WITH BOATS. 109C 11022000 IF(.NOT.OBJACT(X)) CALL RSPEAK(368) 111C !OBJ HANDLE? 112 RETURN 113C 114C V103-- DEFLATE. 115C 11623000 IF(.NOT.OBJACT(X)) CALL RSPEAK(369) 117C !OBJ HANDLE? 118 RETURN 119C VAPPLI, PAGE 4 120C 121C V104-- ALARM. IF SLEEPING, WAKE HIM UP. 122C 12324000 IF(and(OFLAG2(PRSO),SLEPBT).EQ.0) GO TO 24100 124 VAPPLI=OBJACT(X) 125C !SLEEPING, LET OBJ DO. 126 RETURN 127C 12824100 CALL RSPSUB(370,ODO2) 129C !JOKE. 130 RETURN 131C 132C V105-- EXORCISE. OBJECTS HANDLE. 133C 13425000 F=OBJACT(X) 135C !OBJECTS HANDLE. 136 RETURN 137C 138C V106-- PLUG. LET OBJECTS HANDLE. 139C 14026000 IF(.NOT.OBJACT(X)) CALL RSPEAK(371) 141 RETURN 142C 143C V107-- KICK. IF OBJECT IGNORES, JOKE. 144C 14527000 IF(.NOT.OBJACT(X)) CALL RSPSB2(378,ODO2,RMK) 146 RETURN 147C 148C V108-- WAVE. SAME. 149C 15028000 IF(.NOT.OBJACT(X)) CALL RSPSB2(379,ODO2,RMK) 151 RETURN 152C 153C V109,V110-- RAISE, LOWER. SAME. 154C 15529000 CONTINUE 15630000 IF(.NOT.OBJACT(X)) CALL RSPSB2(380,ODO2,RMK) 157 RETURN 158C 159C V111-- RUB. SAME. 160C 16131000 IF(.NOT.OBJACT(X)) CALL RSPSB2(381,ODO2,RMK) 162 RETURN 163C 164C V112-- PUSH. SAME. 165C 16632000 IF(.NOT.OBJACT(X)) CALL RSPSB2(382,ODO2,RMK) 167 RETURN 168C VAPPLI, PAGE 5 169C 170C V113-- UNTIE. IF OBJECT IGNORES, JOKE. 171C 17233000 IF(OBJACT(X)) RETURN 173C !OBJECT HANDLE? 174 I=383 175C !NO, NOT TIED. 176 IF(and(OFLAG2(PRSO),TIEBT).EQ.0) I=384 177 CALL RSPEAK(I) 178 RETURN 179C 180C V114-- TIE. NEVER REALLY WORKS. 181C 18234000 IF(and(OFLAG2(PRSO),TIEBT).NE.0) GO TO 34100 183 CALL RSPEAK(385) 184C !NOT TIEABLE. 185 RETURN 186C 18734100 IF(.NOT.OBJACT(X)) CALL RSPSUB(386,ODO2) 188C !JOKE. 189 RETURN 190C 191C V115-- TIE UP. NEVER REALLY WORKS. 192C 19335000 IF(and(OFLAG2(PRSI),TIEBT).NE.0) GO TO 35100 194 CALL RSPSUB(387,ODO2) 195C !NOT TIEABLE. 196 RETURN 197C 19835100 I=388 199C !ASSUME VILLAIN. 200 IF(and(OFLAG2(PRSO),VILLBT).EQ.0) I=389 201 CALL RSPSUB(I,ODO2) 202C !JOKE. 203 RETURN 204C 205C V116-- TURN. OBJECT MUST HANDLE. 206C 20736000 IF(and(OFLAG1(PRSO),TURNBT).NE.0) GO TO 36100 208 CALL RSPEAK(390) 209C !NOT TURNABLE. 210 RETURN 211C 21236100 IF(and(OFLAG1(PRSI),TOOLBT).NE.0) GO TO 36200 213 CALL RSPSUB(391,ODI2) 214C !NOT A TOOL. 215 RETURN 216C 21736200 VAPPLI=OBJACT(X) 218C !LET OBJECT HANDLE. 219 RETURN 220C 221C V117-- BREATHE. BECOMES INFLATE WITH LUNGS. 222C 22338000 PRSA=INFLAW 224 PRSI=LUNGS 225 GO TO 22000 226C !HANDLE LIKE INFLATE. 227C 228C V118-- KNOCK. MOSTLY JOKE. 229C 23039000 IF(OBJACT(X)) RETURN 231C !OBJ HANDLE? 232 I=394 233C !JOKE FOR DOOR. 234 IF(and(OFLAG1(PRSO),DOORBT).EQ.0) I=395 235 CALL RSPSUB(I,ODO2) 236C !JOKE FOR NONDOORS TOO. 237 RETURN 238C 239C V119-- LOOK. 240C 24140000 IF(PRSO.NE.0) GO TO 41500 242C !SOMETHING TO LOOK AT? 243 VAPPLI=RMDESC(3) 244C !HANDLED BY RMDESC. 245 RETURN 246C 247C V120-- EXAMINE. 248C 24941000 IF(PRSO.NE.0) GO TO 41500 250C !SOMETHING TO EXAMINE? 251 VAPPLI=RMDESC(0) 252C !HANDLED BY RMDESC. 253 RETURN 254C 25541500 IF(OBJACT(X)) RETURN 256C !OBJ HANDLE? 257 I=OREAD(PRSO) 258C !GET READING MATERIAL. 259 IF(I.NE.0) CALL RSPEAK(I) 260C !OUTPUT IF THERE, 261 IF(I.EQ.0) CALL RSPSUB(429,ODO2) 262C !OTHERWISE DEFAULT. 263 PRSA=FOOW 264C !DEFUSE ROOM PROCESSORS. 265 RETURN 266C 267C V121-- SHAKE. IF HOLLOW OBJECT, SOME ACTION. 268C 26942000 IF(OBJACT(X)) RETURN 270C !OBJECT HANDLE? 271 IF(and(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 42100 272 CALL RSPEAK(371) 273C !JOKE FOR VILLAINS. 274 RETURN 275C 27642100 IF(QEMPTY(PRSO).OR.(and(OFLAG1(PRSO),TAKEBT).EQ.0)) 277& GO TO 10 278 IF(QOPEN(PRSO)) GO TO 42300 279C !OPEN? SPILL. 280 CALL RSPSUB(396,ODO2) 281C !NO, DESCRIBE NOISE. 282 RETURN 283C 28442300 CALL RSPSUB(397,ODO2) 285C !SPILL THE WORKS. 286 DO 42500 I=1,OLNT 287C !SPILL CONTENTS. 288 IF(OCAN(I).NE.PRSO) GO TO 42500 289C !INSIDE? 290 OFLAG2(I)=or(OFLAG2(I),TCHBT) 291 IF(AV.EQ.0) GO TO 42400 292C !IN VEHICLE? 293 CALL NEWSTA(I,0,0,AV,0) 294C !YES, SPILL IN THERE. 295 GO TO 42500 296C 29742400 CALL NEWSTA(I,0,HERE,0,0) 298C !NO, SPILL ON FLOOR, 299 IF(I.EQ.WATER) CALL NEWSTA(I,133,0,0,0) 300C !BUT WATER DISAPPEARS. 30142500 CONTINUE 302 RETURN 303C 304C V122-- MOVE. MOSTLY JOKES. 305C 30643000 IF(OBJACT(X)) RETURN 307C !OBJ HANDLE? 308 I=398 309C !ASSUME NOT HERE. 310 IF(QHERE(PRSO,HERE)) I=399 311 CALL RSPSUB(I,ODO2) 312C !JOKE. 313 RETURN 314C VAPPLI, PAGE 6 315C 316C V123-- TURN ON. 317C 31844000 F=LIT(HERE) 319C !RECORD IF LIT. 320 IF(OBJACT(X)) GO TO 44300 321C !OBJ HANDLE? 322 IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND. 323& (OADV(PRSO).EQ.WINNER)) GO TO 44100 324 CALL RSPEAK(400) 325C !CANT DO IT. 326 RETURN 327C 32844100 IF(and(OFLAG1(PRSO),ONBT).EQ.0) GO TO 44200 329 CALL RSPEAK(401) 330C !ALREADY ON. 331 RETURN 332C 33344200 OFLAG1(PRSO)=or(OFLAG1(PRSO),ONBT) 334 CALL RSPSUB(404,ODO2) 33544300 IF(.NOT.F .AND.LIT(HERE)) F=RMDESC(0) 336C !ROOM NEWLY LIT. 337 RETURN 338C 339C V124-- TURN OFF. 340C 34145000 IF(OBJACT(X)) GO TO 45300 342C !OBJ HANDLE? 343 IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND. 344& (OADV(PRSO).EQ.WINNER)) GO TO 45100 345 CALL RSPEAK(402) 346C !CANT DO IT. 347 RETURN 348C 34945100 IF(and(OFLAG1(PRSO),ONBT).NE.0) GO TO 45200 350 CALL RSPEAK(403) 351C !ALREADY OFF. 352 RETURN 353C 35445200 OFLAG1(PRSO)=and(OFLAG1(PRSO), not(ONBT)) 355 CALL RSPSUB(405,ODO2) 35645300 IF(.NOT.LIT(HERE)) CALL RSPEAK(406) 357C !MAY BE DARK. 358 RETURN 359C 360C V125-- OPEN. A FINE MESS. 361C 36246000 IF(OBJACT(X)) RETURN 363C !OBJ HANDLE? 364 IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 46100 36546050 CALL RSPSUB(407,ODO2) 366C !NOT OPENABLE. 367 RETURN 368C 36946100 IF(OCAPAC(PRSO).NE.0) GO TO 46200 370 CALL RSPSUB(408,ODO2) 371C !NOT OPENABLE. 372 RETURN 373C 37446200 IF(.NOT.QOPEN(PRSO)) GO TO 46225 375 CALL RSPEAK(412) 376C !ALREADY OPEN. 377 RETURN 378C 37946225 OFLAG2(PRSO)=or(OFLAG2(PRSO),OPENBT) 380 IF((and(OFLAG1(PRSO),TRANBT).NE.0).OR.QEMPTY(PRSO)) 381& GO TO 46300 382 CALL PRINCO(PRSO,410) 383C !PRINT CONTENTS. 384 RETURN 385C 38646300 CALL RSPEAK(409) 387C !DONE 388 RETURN 389C 390C V126-- CLOSE. 391C 39247000 IF(OBJACT(X)) RETURN 393C !OBJ HANDLE? 394 IF(and(OFLAG1(PRSO),CONTBT).EQ.0) GO TO 46050 395 IF(OCAPAC(PRSO).NE.0) GO TO 47100 396 CALL RSPSUB(411,ODO2) 397C !NOT CLOSABLE. 398 RETURN 399C 40047100 IF(QOPEN(PRSO)) GO TO 47200 401C !OPEN? 402 CALL RSPEAK(413) 403C !NO, JOKE. 404 RETURN 405C 40647200 OFLAG2(PRSO)=and(OFLAG2(PRSO), not(OPENBT)) 407 CALL RSPEAK(414) 408C !DONE. 409 RETURN 410C VAPPLI, PAGE 7 411C 412C V127-- FIND. BIG MEGILLA. 413C 41448000 IF(OBJACT(X)) RETURN 415C !OBJ HANDLE? 416 I=415 417C !DEFAULT CASE. 418 IF(QHERE(PRSO,HERE)) GO TO 48300 419C !IN ROOM? 420 IF(OADV(PRSO).EQ.WINNER) GO TO 48200 421C !ON WINNER? 422 J=OCAN(PRSO) 423C !DOWN ONE LEVEL. 424 IF(J.EQ.0) GO TO 10 425 IF(((and(OFLAG1(J),TRANBT).EQ.0).AND. 426& (.NOT.QOPEN(J).OR.(and(OFLAG1(J),(DOORBT+CONTBT)).EQ.0)))) 427& GO TO 10 428 I=417 429C !ASSUME IN ROOM. 430 IF(QHERE(J,HERE)) GO TO 48100 431 IF(OADV(J).NE.WINNER) GO TO 10 432C !NOT HERE OR ON PERSON. 433 I=418 43448100 CALL RSPSUB(I,ODESC2(J)) 435C !DESCRIBE FINDINGS. 436 RETURN 437C 43848200 I=416 43948300 CALL RSPSUB(I,ODO2) 440C !DESCRIBE FINDINGS. 441 RETURN 442C 443C V128-- WAIT. RUN CLOCK DEMON. 444C 44549000 CALL RSPEAK(419) 446C !TIME PASSES. 447 DO 49100 I=1,3 448 IF(CLOCKD(X)) RETURN 44949100 CONTINUE 450 RETURN 451C 452C V129-- SPIN. 453C V159-- TURN TO. 454C 45550000 CONTINUE 45688000 IF(.NOT.OBJACT(X)) CALL RSPEAK(663) 457C !IF NOT OBJ, JOKE. 458 RETURN 459C 460C V130-- BOARD. WORKS WITH VEHICLES. 461C 46251000 IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 51100 463 CALL RSPSUB(421,ODO2) 464C !NOT VEHICLE, JOKE. 465 RETURN 466C 46751100 IF(QHERE(PRSO,HERE)) GO TO 51200 468C !HERE? 469 CALL RSPSUB(420,ODO2) 470C !NO, JOKE. 471 RETURN 472C 47351200 IF(AV.EQ.0) GO TO 51300 474C !ALREADY GOT ONE? 475 CALL RSPSUB(422,ODO2) 476C !YES, JOKE. 477 RETURN 478C 47951300 IF(OBJACT(X)) RETURN 480C !OBJ HANDLE? 481 CALL RSPSUB(423,ODO2) 482C !DESCRIBE. 483 AVEHIC(WINNER)=PRSO 484 IF(WINNER.NE.PLAYER) OCAN(AOBJ(WINNER))=PRSO 485 RETURN 486C 487C V131-- DISEMBARK. 488C 48952000 IF(AV.EQ.PRSO) GO TO 52100 490C !FROM VEHICLE? 491 CALL RSPEAK(424) 492C !NO, JOKE. 493 RETURN 494C 49552100 IF(OBJACT(X)) RETURN 496C !OBJ HANDLE? 497 IF(and(RFLAG(HERE),RLAND).NE.0) GO TO 52200 498 CALL RSPEAK(425) 499C !NOT ON LAND. 500 RETURN 501C 50252200 AVEHIC(WINNER)=0 503 CALL RSPEAK(426) 504 IF(WINNER.NE.PLAYER) CALL NEWSTA(AOBJ(WINNER),0,HERE,0,0) 505 RETURN 506C 507C V132-- TAKE. HANDLED EXTERNALLY. 508C 50953000 VAPPLI=TAKE(.TRUE.) 510 RETURN 511C 512C V133-- INVENTORY. PROCESSED EXTERNALLY. 513C 51455000 CALL INVENT(WINNER) 515 RETURN 516C VAPPLI, PAGE 8 517C 518C V134-- FILL. STRANGE DOINGS WITH WATER. 519C 52056000 IF(PRSI.NE.0) GO TO 56050 521C !ANY OBJ SPECIFIED? 522 IF(and(RFLAG(HERE),(RWATER+RFILL)).NE.0) GO TO 56025 523 CALL RSPEAK(516) 524C !NOTHING TO FILL WITH. 525 PRSWON=.FALSE. 526C !YOU LOSE. 527 RETURN 528C 52956025 PRSI=GWATE 530C !USE GLOBAL WATER. 53156050 IF(OBJACT(X)) RETURN 532C !OBJ HANDLE? 533 IF((PRSI.NE.GWATE).AND.(PRSI.NE.WATER)) 534& CALL RSPSB2(444,ODI2,ODO2) 535 RETURN 536C 537C V135,V136-- EAT/DRINK 538C 53958000 CONTINUE 54059000 IF(OBJACT(X)) RETURN 541C !OBJ HANDLE? 542 IF(PRSO.EQ.GWATE) GO TO 59500 543C !DRINK GLOBAL WATER? 544 IF(.NOT.EDIBLE(PRSO)) GO TO 59400 545C !EDIBLE? 546 IF(OADV(PRSO).EQ.WINNER) GO TO 59200 547C !YES, ON WINNER? 54859100 CALL RSPSUB(454,ODO2) 549C !NOT ACCESSIBLE. 550 RETURN 551C 55259200 IF(PRSA.EQ.DRINKW) GO TO 59300 553C !DRINK FOOD? 554 CALL NEWSTA(PRSO,455,0,0,0) 555C !NO, IT DISAPPEARS. 556 RETURN 557C 55859300 CALL RSPEAK(456) 559C !YES, JOKE. 560 RETURN 561C 56259400 IF(.NOT.DRKBLE(PRSO)) GO TO 59600 563C !DRINKABLE? 564 IF(OCAN(PRSO).EQ.0) GO TO 59100 565C !YES, IN SOMETHING? 566 IF(OADV(OCAN(PRSO)).NE.WINNER) GO TO 59100 567 IF(QOPEN(OCAN(PRSO))) GO TO 59500 568C !CONT OPEN? 569 CALL RSPEAK(457) 570C !NO, JOKE. 571 RETURN 572C 57359500 CALL NEWSTA(PRSO,458,0,0,0) 574C !GONE. 575 RETURN 576C 57759600 CALL RSPSUB(453,ODO2) 578C !NOT FOOD OR DRINK. 579 RETURN 580C 581C V137-- BURN. COMPLICATED. 582C 58360000 IF(and(OFLAG1(PRSI),(FLAMBT+LITEBT+ONBT)).NE. 584& (FLAMBT+LITEBT+ONBT)) GO TO 60400 585 IF(OBJACT(X)) RETURN 586C !OBJ HANDLE? 587 IF(OCAN(PRSO).NE.RECEP) GO TO 60050 588C !BALLOON? 589 IF(OAPPLI(OACTIO(BALLO),0)) RETURN 590C !DID IT HANDLE? 59160050 IF(and(OFLAG1(PRSO),BURNBT).EQ.0) GO TO 60300 592 IF(OADV(PRSO).NE.WINNER) GO TO 60100 593C !CARRYING IT? 594 CALL RSPSUB(459,ODO2) 595 CALL JIGSUP(460) 596 RETURN 597C 59860100 J=OCAN(PRSO) 599C !GET CONTAINER. 600 IF(QHERE(PRSO,HERE).OR. ((AV.NE.0).AND.(J.EQ.AV))) 601& GO TO 60200 602 IF(J.EQ.0) GO TO 60150 603C !INSIDE? 604 IF(.NOT.QOPEN(J)) GO TO 60150 605C !OPEN? 606 IF(QHERE(J,HERE).OR.((AV.NE.0).AND.(OCAN(J).EQ.AV))) 607& GO TO 60200 60860150 CALL RSPEAK(461) 609C !CANT REACH IT. 610 RETURN 611C 61260200 CALL RSPSUB(462,ODO2) 613C !BURN IT. 614 CALL NEWSTA(PRSO,0,0,0,0) 615 RETURN 616C 61760300 CALL RSPSUB(463,ODO2) 618C !CANT BURN IT. 619 RETURN 620C 62160400 CALL RSPSUB(301,ODI2) 622C !CANT BURN IT WITH THAT. 623 RETURN 624C VAPPLI, PAGE 9 625C 626C V138-- MUNG. GO TO COMMON ATTACK CODE. 627C 62863000 I=466 629C !CHOOSE PHRASE. 630 IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66100 631 IF(.NOT.OBJACT(X)) CALL RSPSB2(466,ODO2,RMK) 632 RETURN 633C 634C V139-- KILL. GO TO COMMON ATTACK CODE. 635C 63664000 I=467 637C !CHOOSE PHRASE. 638 GO TO 66100 639C 640C V140-- SWING. INVERT OBJECTS, FALL THRU TO ATTACK. 641C 64265000 J=PRSO 643C !INVERT. 644 PRSO=PRSI 645 PRSI=J 646 J=ODO2 647 ODO2=ODI2 648 ODI2=J 649 PRSA=ATTACW 650C !FOR OBJACT. 651C 652C V141-- ATTACK. FALL THRU TO ATTACK CODE. 653C 65466000 I=468 655C 656C COMMON MUNG/ATTACK/SWING/KILL CODE. 657C 65866100 IF(PRSO.NE.0) GO TO 66200 659C !ANYTHING? 660 CALL RSPEAK(469) 661C !NO, JOKE. 662 RETURN 663C 66466200 IF(OBJACT(X)) RETURN 665C !OBJ HANDLE? 666 IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66300 667 IF(and(OFLAG1(PRSO),VICTBT).EQ.0) 668& CALL RSPSUB(470,ODO2) 669 RETURN 670C 67166300 J=471 672C !ASSUME NO WEAPON. 673 IF(PRSI.EQ.0) GO TO 66500 674 IF(and(OFLAG2(PRSI),WEAPBT).EQ.0) GO TO 66400 675 MELEE=1 676C !ASSUME SWORD. 677 IF(PRSI.NE.SWORD) MELEE=2 678C !MUST BE KNIFE. 679 I=BLOW(PLAYER,PRSO,MELEE,.TRUE.,0) 680C !STRIKE BLOW. 681 RETURN 682C 68366400 J=472 684C !NOT A WEAPON. 68566500 CALL RSPSB2(I,ODO2,J) 686C !JOKE. 687 RETURN 688C VAPPLI, PAGE 10 689C 690C V142-- WALK. PROCESSED EXTERNALLY. 691C 69268000 VAPPLI=WALK(X) 693 RETURN 694C 695C V143-- TELL. PROCESSED IN GAME. 696C 69769000 CALL RSPEAK(603) 698 RETURN 699C 700C V144-- PUT. PROCESSED EXTERNALLY. 701C 70270000 VAPPLI=PUT(.TRUE.) 703 RETURN 704C 705C V145,V146,V147,V148-- DROP/GIVE/POUR/THROW 706C 70771000 CONTINUE 70872000 CONTINUE 70973000 CONTINUE 71074000 VAPPLI=DROP(.FALSE.) 711 RETURN 712C 713C V149-- SAVE 714C 71577000 IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 77100 716 CALL RSPEAK(828) 717C !NO SAVES IN ENDGAME. 718 RETURN 719C 72077100 CALL SAVEGM 721 RETURN 722C 723C V150-- RESTORE 724C 725#ifdef PDP 72678000 call restor 727#else 72878000 IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 78100 729 CALL RSPEAK(829) 730C !NO RESTORES IN ENDGAME. 731 RETURN 732C 73378100 CALL RSTRGM 734#endif PDP 735 RETURN 736C VAPPLI, PAGE 11 737C 738C V151-- HELLO 739C 74080000 IF(PRSO.NE.0) GO TO 80100 741C !ANY OBJ? 742 CALL RSPEAK(346+RND(4)) 743C !NO, VANILLA HELLO. 744 RETURN 745C 74680100 IF(PRSO.NE.AVIAT) GO TO 80200 747C !HELLO AVIATOR? 748 CALL RSPEAK(350) 749C !NOTHING HAPPENS. 750 RETURN 751C 75280200 IF(PRSO.NE.SAILO) GO TO 80300 753C !HELLO SAILOR? 754 HS=HS+1 755C !COUNT. 756 I=351 757C !GIVE NORMAL OR 758 IF(MOD(HS,10).EQ.0) I=352 759C !RANDOM MESSAGE. 760 IF(MOD(HS,20).EQ.0) I=353 761 CALL RSPEAK(I) 762C !SPEAK UP. 763 RETURN 764C 76580300 IF(OBJACT(X)) RETURN 766C !OBJ HANDLE? 767 I=354 768C !ASSUME VILLAIN. 769 IF(and(OFLAG2(PRSO),(VILLBT+ACTRBT)).EQ.0) I=355 770 CALL RSPSUB(I,ODO2) 771C !HELLO THERE 772C ! 773 RETURN 774C 775C V152-- LOOK INTO 776C 77781000 IF(OBJACT(X)) RETURN 778C !OBJ HANDLE? 779 IF(and(OFLAG1(PRSO),DOORBT).EQ.0) GO TO 81300 780 IF(.NOT.QOPEN(PRSO)) GO TO 81200 781C !OPEN? 782 CALL RSPSUB(628,ODO2) 783C !OPEN DOOR- UNINTERESTING. 784 RETURN 785C 78681200 CALL RSPSUB(525,ODO2) 787C !CLOSED DOOR- CANT SEE. 788 RETURN 789C 79081300 IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 81400 791 IF(QOPEN(PRSO).OR.(and(OFLAG1(PRSO),TRANBT).NE.0)) 792& GO TO 81400 793 IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 81200 794 CALL RSPSUB(630,ODO2) 795C !CANT LOOK INSIDE. 796 RETURN 797C 79881400 IF(QEMPTY(PRSO)) GO TO 81500 799C !VEH OR SEE IN. EMPTY? 800 CALL PRINCO(PRSO,573) 801C !NO, LIST CONTENTS. 802 RETURN 803C 80481500 CALL RSPSUB(629,ODO2) 805C !EMPTY. 806 RETURN 807C 808C V153-- LOOK UNDER 809C 81082000 IF(.NOT.OBJACT(X)) CALL RSPEAK(631) 811C !OBJECT HANDLE? 812 RETURN 813C VAPPLI, PAGE 12 814C 815C V154-- PUMP 816C 81783000 IF((OROOM(PUMP).EQ.HERE).OR.(OADV(PUMP).EQ.WINNER)) 818& GO TO 83100 819 CALL RSPEAK(632) 820C !NO. 821 RETURN 822C 82383100 PRSI=PUMP 824C !BECOMES INFLATE 825 PRSA=INFLAW 826C !X WITH PUMP. 827 GO TO 22000 828C !DONE. 829C 830C V155-- WIND 831C 83284000 IF(.NOT.OBJACT(X)) CALL RSPSUB(634,ODO2) 833C !OBJ HANDLE? 834 RETURN 835C 836C V156-- CLIMB 837C V157-- CLIMB UP 838C V158-- CLIMB DOWN 839C 84085000 CONTINUE 84186000 CONTINUE 84287000 I=XUP 843C !ASSUME UP. 844 IF(PRSA.EQ.CLMBDW) I=XDOWN 845C !UNLESS CLIMB DN. 846 F=(and(OFLAG2(PRSO),CLMBBT)).NE.0 847 IF(F.AND.FINDXT(I,HERE)) GO TO 87500 848C !ANYTHING TO CLIMB? 849 IF(OBJACT(X)) RETURN 850C !OBJ HANDLE? 851 I=657 852 IF(F) I=524 853C !VARIETY OF JOKES. 854 IF(.NOT.F .AND.((PRSO.EQ.WALL).OR. 855& ((PRSO.GE.WNORT).AND.(PRSO.LE.WNORT+3)))) 856& I=656 857 CALL RSPEAK(I) 858C !JOKE. 859 RETURN 860C 86187500 PRSA=WALKW 862C !WALK 863 PRSO=I 864C !IN SPECIFIED DIR. 865 VAPPLI=WALK(X) 866 RETURN 867C 868 END 869C CLOCKD- CLOCK DEMON FOR INTERMOVE CLOCK EVENTS 870C 871C DECLARATIONS 872C 873 LOGICAL FUNCTION CLOCKD(X) 874 IMPLICIT INTEGER (A-Z) 875C 876C CLOCK INTERRUPTS 877C 878#include "clock.h" 879C 880 CLOCKD=.FALSE. 881C !ASSUME NO ACTION. 882 DO 100 I=1,CLNT 883 IF(.NOT.CFLAG(I) .OR.(CTICK(I).EQ.0)) GO TO 100 884 IF(CTICK(I).LT.0) GO TO 50 885C !PERMANENT ENTRY? 886 CTICK(I)=CTICK(I)-1 887 IF(CTICK(I).NE.0) GO TO 100 888C !TIMER EXPIRED? 88950 CLOCKD=.TRUE. 890 CALL CEVAPP(CACTIO(I)) 891C !DO ACTION. 892100 CONTINUE 893 RETURN 894C 895 END 896