home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume2 / dungeon / part06 / actors.F next >
Text File  |  1987-09-01  |  7KB  |  299 lines

  1. C AAPPLI- APPLICABLES FOR ADVENTURERS
  2. C
  3. C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  4. C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  5. C WRITTEN BY R. M. SUPNIK
  6. C
  7. C DECLARATIONS
  8. C
  9.     LOGICAL FUNCTION AAPPLI(RI)
  10.     IMPLICIT INTEGER (A-Z)
  11.     LOGICAL F,MOVETO
  12. #include "parser.h"
  13. #include "gamestate.h"
  14. #include "rooms.h"
  15. #include "rflag.h"
  16. #include "rindex.h"
  17. #include "xsrch.h"
  18. #include "objects.h"
  19. #include "oflags.h"
  20. #include "oindex.h"
  21. #include "clock.h"
  22. #include "advers.h"
  23. #include "verbs.h"
  24. #include "flags.h"
  25. C AAPPLI, PAGE 2
  26. C
  27.     IF(RI.EQ.0) GO TO 10
  28. C                        !IF ZERO, NO APP.
  29.     AAPPLI=.TRUE.
  30. C                        !ASSUME WINS.
  31.     GO TO (1000,2000),RI
  32. C                        !BRANCH ON ADV.
  33.     CALL BUG(11,RI)
  34. C
  35. C COMMON FALSE RETURN.
  36. C
  37. 10    AAPPLI=.FALSE.
  38.     RETURN
  39. C
  40. C A1--    ROBOT.  PROCESS MOST COMMANDS GIVEN TO ROBOT.
  41. C
  42. 1000    IF((PRSA.NE.RAISEW).OR.(PRSO.NE.RCAGE)) GO TO 1200
  43.     CFLAG(CEVSPH)=.FALSE.
  44. C                        !ROBOT RAISED CAGE.
  45.     WINNER=PLAYER
  46. C                        !RESET FOR PLAYER.
  47.     F=MOVETO(CAGER,WINNER)
  48. C                        !MOVE TO NEW ROOM.
  49.     CALL NEWSTA(CAGE,567,CAGER,0,0)
  50. C                        !INSTALL CAGE IN ROOM.
  51.     CALL NEWSTA(ROBOT,0,CAGER,0,0)
  52. C                        !INSTALL ROBOT IN ROOM.
  53.     AROOM(AROBOT)=CAGER
  54. C                        !ALSO MOVE ROBOT/ADV.
  55.     CAGESF=.TRUE.
  56. C                        !CAGE SOLVED.
  57.     OFLAG1(ROBOT)=and(OFLAG1(ROBOT),not(NDSCBT))
  58.     OFLAG1(SPHER)=or(OFLAG1(SPHER),TAKEBT)
  59.     RETURN
  60. C
  61. 1200    IF((PRSA.NE.DRINKW).AND.(PRSA.NE.EATW)) GO TO 1300
  62.     CALL RSPEAK(568)
  63. C                        !EAT OR DRINK, JOKE.
  64.     RETURN
  65. C
  66. 1300    IF(PRSA.NE.READW) GO TO 1400
  67. C                        !READ,
  68.     CALL RSPEAK(569)
  69. C                        !JOKE.
  70.     RETURN
  71. C
  72. 1400    IF((PRSA.EQ.WALKW).OR.(PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW)
  73. &     .OR.(PRSA.EQ.PUTW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.THROWW)
  74. &     .OR.(PRSA.EQ.TURNW).OR.(PRSA.EQ.LEAPW)) GO TO 10
  75.     CALL RSPEAK(570)
  76. C                        !JOKE.
  77.     RETURN
  78. C AAPPLI, PAGE 3
  79. C
  80. C A2--    MASTER.  PROCESS MOST COMMANDS GIVEN TO MASTER.
  81. C
  82. 2000    IF(and(OFLAG2(QDOOR),OPENBT).NE.0) GO TO 2100
  83.     CALL RSPEAK(783)
  84. C                        !NO MASTER YET.
  85.     RETURN
  86. C
  87. 2100    IF(PRSA.NE.WALKW) GO TO 2200
  88. C                        !WALK?
  89.     I=784
  90. C                        !ASSUME WONT.
  91.     IF(((HERE.EQ.SCORR).AND.
  92. &        ((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XENTER))).OR.
  93. &      ((HERE.EQ.NCORR).AND.
  94. &        ((PRSO.EQ.XSOUTH).OR.(PRSO.EQ.XENTER))))
  95. &        I=785
  96.     CALL RSPEAK(I)
  97.     RETURN
  98. C
  99. 2200    IF((PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW).OR.(PRSA.EQ.PUTW).OR.
  100. &      (PRSA.EQ.THROWW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.TURNW).OR.
  101. &      (PRSA.EQ.SPINW).OR.(PRSA.EQ.TRNTOW).OR.(PRSA.EQ.FOLLOW).OR.
  102. &      (PRSA.EQ.STAYW).OR.(PRSA.EQ.OPENW).OR.(PRSA.EQ.CLOSEW).OR.
  103. &      (PRSA.EQ.KILLW)) GO TO 10
  104.     CALL RSPEAK(786)
  105. C                        !MASTER CANT DO IT.
  106.     RETURN
  107. C
  108.     END
  109. C THIEFD-    INTERMOVE THIEF DEMON
  110. C
  111. C DECLARATIONS
  112. C
  113.     SUBROUTINE THIEFD
  114.     IMPLICIT INTEGER (A-Z)
  115.     LOGICAL ONCE,PROB,QHERE,QSTILL,LIT,WINNIN
  116. #include "gamestate.h"
  117. C
  118. #include "debug.h"
  119. #include "rooms.h"
  120. #include "rflag.h"
  121. #include "rindex.h"
  122. #include "objects.h"
  123. #include "oflags.h"
  124. #include "oindex.h"
  125. #include "villians.h"
  126. #include "flags.h"
  127. C
  128. C FUNCTIONS AND DATA
  129. C
  130.     QSTILL(R)=(QHERE(STILL,R).OR.(OADV(STILL).EQ.-THIEF))
  131. C THIEFD, PAGE 2
  132. C
  133. #ifdef debug
  134.     DFLAG=and(PRSFLG, 32768).NE.0
  135. #endif debug
  136. C                        !SET UP DETAIL FLAG.
  137.     ONCE=.FALSE.
  138. C                        !INIT FLAG.
  139. 1025    RHERE=OROOM(THIEF)
  140. C                        !VISIBLE POS.
  141.     IF(RHERE.NE.0) THFPOS=RHERE
  142. C
  143.     IF(THFPOS.EQ.HERE) GO TO 1100
  144. C                        !THIEF IN WIN RM?
  145.     IF(THFPOS.NE.TREAS) GO TO 1400
  146. C                        !THIEF NOT IN TREAS?
  147. C
  148. C THIEF IS IN TREASURE ROOM, AND WINNER IS NOT.
  149. C
  150. #ifdef debug
  151.     IF(DFLAG) PRINT 10
  152. 10    FORMAT(' THIEFD-- IN TREASURE ROOM')
  153. #endif debug
  154.     IF(RHERE.EQ.0) GO TO 1050
  155. C                        !VISIBLE?
  156.     CALL NEWSTA(THIEF,0,0,0,0)
  157. C                        !YES, VANISH.
  158.     RHERE=0
  159.     IF(QSTILL(TREAS)) CALL NEWSTA(STILL,0,0,THIEF,0)
  160. 1050    I=ROBADV(-THIEF,THFPOS,0,0)
  161. C                        !DROP VALUABLES.
  162.     IF(QHERE(EGG,THFPOS)) OFLAG2(EGG)=or(OFLAG2(EGG),OPENBT)
  163.     GO TO 1700
  164. C
  165. C THIEF AND WINNER IN SAME ROOM.
  166. C
  167. 1100    IF(THFPOS.EQ.TREAS) GO TO 1700
  168. C                        !IF TREAS ROOM, NOTHING.
  169.     IF(and(RFLAG(THFPOS),RLIGHT).NE.0) GO TO 1400
  170. #ifdef debug
  171.     IF(DFLAG) PRINT 20
  172. 20    FORMAT(' THIEFD-- IN ADV ROOM')
  173. #endif debug
  174.     IF(THFFLG) GO TO 1300
  175. C                        !THIEF ANNOUNCED?
  176.     IF((RHERE.NE.0).OR.PROB(70,70)) GO TO 1150
  177. C                        !IF INVIS AND 30%.
  178.     IF(OCAN(STILL).NE.THIEF) GO TO 1700
  179. C                        !ABORT IF NO STILLETTO.
  180.     CALL NEWSTA(THIEF,583,THFPOS,0,0)
  181. C                        !INSERT THIEF INTO ROOM.
  182.     THFFLG=.TRUE.
  183. C                        !THIEF IS ANNOUNCED.
  184.     RETURN
  185. C
  186. 1150    IF((RHERE.EQ.0).OR.(and(OFLAG2(THIEF),FITEBT).EQ.0))
  187. &        GO TO 1200
  188.     IF(WINNIN(THIEF,WINNER)) GO TO 1175
  189. C                        !WINNING?
  190.     CALL NEWSTA(THIEF,584,0,0,0)
  191. C                        !NO, VANISH THIEF.
  192.     OFLAG2(THIEF)=and(OFLAG2(THIEF), not(FITEBT))
  193.     IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
  194.     RETURN
  195. C
  196. 1175    IF(PROB(90,90)) GO TO 1700
  197. C                        !90% CHANCE TO STAY.
  198. C
  199. 1200    IF((RHERE.EQ.0).OR.PROB(70,70)) GO TO 1250
  200. C                        !IF VISIBLE AND 30%
  201.     CALL NEWSTA(THIEF,585,0,0,0)
  202. C                        !VANISH THIEF.
  203.     IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
  204.     RETURN
  205. C
  206. 1300    IF(RHERE.EQ.0) GO TO 1700
  207. C                        !ANNOUNCED.  VISIBLE?
  208. 1250    IF(PROB(70,70)) RETURN
  209. C                        !70% CHANCE TO DO NOTHING.
  210.     THFFLG=.TRUE.
  211.     NR=ROBRM(THFPOS,100,0,0,-THIEF)+ROBADV(WINNER,0,0,-THIEF)
  212.     I=586
  213. C                        !ROBBED EM.
  214.     IF(RHERE.NE.0) I=588
  215. C                        !WAS HE VISIBLE?
  216.     IF(NR.NE.0) I=I+1
  217. C                        !DID HE GET ANYTHING?
  218.     CALL NEWSTA(THIEF,I,0,0,0)
  219. C                        !VANISH THIEF.
  220.     IF(QSTILL(THFPOS))
  221. &        CALL NEWSTA(STILL,0,0,THIEF,0)
  222.     IF((NR.NE.0).AND..NOT.LIT(THFPOS)) CALL RSPEAK(406)
  223.     RHERE=0
  224.     GO TO 1700
  225. C                        !ONWARD.
  226. C
  227. C NOT IN ADVENTURERS ROOM.
  228. C
  229. 1400    CALL NEWSTA(THIEF,0,0,0,0)
  230. C                        !VANISH.
  231.     RHERE=0
  232. #ifdef debug
  233.     IF(DFLAG) PRINT 30,THFPOS
  234. 30    FORMAT(' THIEFD-- IN ROOM ',I4)
  235. #endif debug
  236.     IF(QSTILL(THFPOS))
  237. &        CALL NEWSTA(STILL,0,0,THIEF,0)
  238.     IF(and(RFLAG(THFPOS),RSEEN).EQ.0) GO TO 1700
  239.     I=ROBRM(THFPOS,75,0,0,-THIEF)
  240. C                        !ROB ROOM 75%.
  241.     IF((THFPOS.LT.MAZE1).OR.(THFPOS.GT.MAZ15).OR.
  242. &        (HERE.LT.MAZE1).OR.(HERE.GT.MAZ15)) GO TO 1500
  243.     DO 1450 I=1,OLNT
  244. C                        !BOTH IN MAZE.
  245.       IF(.NOT.QHERE(I,THFPOS).OR.PROB(60,60).OR.
  246. &        (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
  247. &        GO TO 1450
  248.       CALL RSPSUB(590,ODESC2(I))
  249. C                        !TAKE OBJECT.
  250.       IF(PROB(40,20)) GO TO 1700
  251.       CALL NEWSTA(I,0,0,0,-THIEF)
  252. C                        !MOST OF THE TIME.
  253.       OFLAG2(I)=or(OFLAG2(I),TCHBT)
  254.       GO TO 1700
  255. 1450    CONTINUE
  256.     GO TO 1700
  257. C
  258. 1500    DO 1550 I=1,OLNT
  259. C                        !NOT IN MAZE.
  260.       IF(.NOT.QHERE(I,THFPOS).OR.(OTVAL(I).NE.0).OR.PROB(80,60).OR.
  261. &        (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
  262. &        GO TO 1550
  263.       CALL NEWSTA(I,0,0,0,-THIEF)
  264.       OFLAG2(I)=or(OFLAG2(I),TCHBT)
  265.       GO TO 1700
  266. 1550    CONTINUE
  267. C
  268. C NOW MOVE TO NEW ROOM.
  269. C
  270. 1700    IF(OADV(ROPE).EQ.-THIEF) DOMEF=.FALSE.
  271.     IF(ONCE) GO TO 1800
  272.     ONCE=.NOT.ONCE
  273. 1750    THFPOS=THFPOS-1
  274. C                        !NEXT ROOM.
  275.     IF(THFPOS.LE.0) THFPOS=RLNT
  276.     IF(and(RFLAG(THFPOS),(RLAND+RSACRD+REND)).NE.RLAND)
  277. &        GO TO 1750
  278.     THFFLG=.FALSE.
  279. C                        !NOT ANNOUNCED.
  280.     GO TO 1025
  281. C                        !ONCE MORE.
  282. C
  283. C ALL DONE.
  284. C
  285. 1800    IF(THFPOS.EQ.TREAS) RETURN
  286. C                        !IN TREASURE ROOM?
  287.     J=591
  288. C                        !NO, DROP STUFF.
  289.     IF(THFPOS.NE.HERE) J=0
  290.     DO 1850 I=1,OLNT
  291.       IF((OADV(I).NE.-THIEF).OR.PROB(70,70).OR.
  292. &        (OTVAL(I).GT.0)) GO TO 1850
  293.       CALL NEWSTA(I,J,THFPOS,0,0)
  294.       J=0
  295. 1850    CONTINUE
  296.     RETURN
  297. C
  298.     END
  299.