1C RAPPL2- SPECIAL PURPOSE ROOM ROUTINES, PART 2 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 RAPPL2(RI) 10 IMPLICIT INTEGER (A-Z) 11 LOGICAL QOPEN,QHERE 12#include "parser.h" 13#include "gamestate.h" 14#include "state.h" 15#include "io.h" 16#include "rooms.h" 17#include "rflag.h" 18#include "rindex.h" 19#include "objects.h" 20#include "oflags.h" 21#include "oindex.h" 22#include "xsrch.h" 23#include "clock.h" 24#include "advers.h" 25#include "verbs.h" 26#include "flags.h" 27C 28C FUNCTIONS AND DATA 29C 30 QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0 31 DATA NEWRMS/38/ 32C RAPPL2, PAGE 2 33C 34 RAPPL2=.TRUE. 35 GO TO (38000,39000,40000,41000,42000,43000,44000, 36& 45000,46000,47000,48000,49000,50000, 37& 51000,52000,53000,54000,55000,56000, 38& 57000,58000,59000,60000), 39& (RI-NEWRMS+1) 40 CALL BUG(70,RI) 41 RETURN 42C 43C R38-- MIRROR D ROOM 44C 4538000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(FDOOR,MRG,0,682,681) 46 RETURN 47C 48C R39-- MIRROR G ROOM 49C 5039000 IF(PRSA.EQ.WALKIW) CALL JIGSUP(685) 51 RETURN 52C 53C R40-- MIRROR C ROOM 54C 5540000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRG,MRB,683,0,681) 56 RETURN 57C 58C R41-- MIRROR B ROOM 59C 6041000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRC,MRA,0,0,681) 61 RETURN 62C 63C R42-- MIRROR A ROOM 64C 6542000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRB,0,0,684,681) 66 RETURN 67C RAPPL2, PAGE 3 68C 69C R43-- MIRROR C EAST/WEST 70C 7143000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,683) 72 RETURN 73C 74C R44-- MIRROR B EAST/WEST 75C 7644000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,686) 77 RETURN 78C 79C R45-- MIRROR A EAST/WEST 80C 8145000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,687) 82 RETURN 83C 84C R46-- INSIDE MIRROR 85C 8646000 IF(PRSA.NE.LOOKW) RETURN 87C !LOOK? 88 CALL RSPEAK(688) 89C !DESCRIBE 90C 91C NOW DESCRIBE POLE STATE. 92C 93C CASES 1,2-- MDIR=270 & MLOC=MRB, POLE IS UP OR IN HOLE 94C CASES 3,4-- MDIR=0 V MDIR=180, POLE IS UP OR IN CHANNEL 95C CASE 5-- POLE IS UP 96C 97 I=689 98C !ASSUME CASE 5. 99 IF((MDIR.EQ.270).AND.(MLOC.EQ.MRB)) 100& I=690+MIN0(POLEUF,1) 101 IF(MOD(MDIR,180).EQ.0) 102& I=692+MIN0(POLEUF,1) 103 CALL RSPEAK(I) 104C !DESCRIBE POLE. 105 CALL RSPSUB(694,695+(MDIR/45)) 106C !DESCRIBE ARROW. 107 RETURN 108C RAPPL2, PAGE 4 109C 110C R47-- MIRROR EYE ROOM 111C 11247000 IF(PRSA.NE.LOOKW) RETURN 113C !LOOK? 114 I=704 115C !ASSUME BEAM STOP. 116 DO 47100 J=1,OLNT 117 IF(QHERE(J,HERE).AND.(J.NE.RBEAM)) GO TO 47200 11847100 CONTINUE 119 I=703 12047200 CALL RSPSUB(I,ODESC2(J)) 121C !DESCRIBE BEAM. 122 CALL LOOKTO(MRA,0,0,0,0) 123C !LOOK NORTH. 124 RETURN 125C 126C R48-- INSIDE CRYPT 127C 12848000 IF(PRSA.NE.LOOKW) RETURN 129C !LOOK? 130 I=46 131C !CRYPT IS OPEN/CLOSED. 132 IF(QOPEN(TOMB)) I=12 133 CALL RSPSUB(705,I) 134 RETURN 135C 136C R49-- SOUTH CORRIDOR 137C 13849000 IF(PRSA.NE.LOOKW) RETURN 139C !LOOK? 140 CALL RSPEAK(706) 141C !DESCRIBE. 142 I=46 143C !ODOOR IS OPEN/CLOSED. 144 IF(QOPEN(ODOOR)) I=12 145 IF(LCELL.EQ.4) CALL RSPSUB(707,I) 146C !DESCRIBE ODOOR IF THERE. 147 RETURN 148C 149C R50-- BEHIND DOOR 150C 15150000 IF(PRSA.NE.WALKIW) GO TO 50100 152C !WALK IN? 153 CFLAG(CEVFOL)=.TRUE. 154C !MASTER FOLLOWS. 155 CTICK(CEVFOL)=-1 156 RETURN 157C 15850100 IF(PRSA.NE.LOOKW) RETURN 159C !LOOK? 160 I=46 161C !QDOOR IS OPEN/CLOSED. 162 IF(QOPEN(QDOOR)) I=12 163 CALL RSPSUB(708,I) 164 RETURN 165C RAPPL2, PAGE 5 166C 167C R51-- FRONT DOOR 168C 16951000 IF(PRSA.EQ.WALKIW) CTICK(CEVFOL)=0 170C !IF EXITS, KILL FOLLOW. 171 IF(PRSA.NE.LOOKW) RETURN 172C !LOOK? 173 CALL LOOKTO(0,MRD,709,0,0) 174C !DESCRIBE SOUTH. 175 I=46 176C !PANEL IS OPEN/CLOSED. 177 IF(INQSTF) I=12 178C !OPEN IF INQ STARTED. 179 J=46 180C !QDOOR IS OPEN/CLOSED. 181 IF(QOPEN(QDOOR)) J=12 182 CALL RSPSB2(710,I,J) 183 RETURN 184C 185C R52-- NORTH CORRIDOR 186C 18752000 IF(PRSA.NE.LOOKW) RETURN 188C !LOOK? 189 I=46 190 IF(QOPEN(CDOOR)) I=12 191C !CDOOR IS OPEN/CLOSED. 192 CALL RSPSUB(711,I) 193 RETURN 194C 195C R53-- PARAPET 196C 19753000 IF(PRSA.EQ.LOOKW) CALL RSPSUB(712,712+PNUMB) 198 RETURN 199C 200C R54-- CELL 201C 20254000 IF(PRSA.NE.LOOKW) RETURN 203C !LOOK? 204 I=721 205C !CDOOR IS OPEN/CLOSED. 206 IF(QOPEN(CDOOR)) I=722 207 CALL RSPEAK(I) 208 I=46 209C !ODOOR IS OPEN/CLOSED. 210 IF(QOPEN(ODOOR)) I=12 211 IF(LCELL.EQ.4) CALL RSPSUB(723,I) 212C !DESCRIBE. 213 RETURN 214C 215C R55-- PRISON CELL 216C 21755000 IF(PRSA.EQ.LOOKW) CALL RSPEAK(724) 218C !LOOK? 219 RETURN 220C 221C R56-- NIRVANA CELL 222C 22356000 IF(PRSA.NE.LOOKW) RETURN 224C !LOOK? 225 I=46 226C !ODOOR IS OPEN/CLOSED. 227 IF(QOPEN(ODOOR)) I=12 228 CALL RSPSUB(725,I) 229 RETURN 230C RAPPL2, PAGE 6 231C 232C R57-- NIRVANA AND END OF GAME 233C 23457000 IF(PRSA.NE.WALKIW) RETURN 235C !WALKIN? 236 CALL RSPEAK(726) 237 CALL SCORE(.FALSE.) 238C moved to exit routine CLOSE(DBCH) 239 CALL EXIT 240C 241C R58-- TOMB ROOM 242C 24358000 IF(PRSA.NE.LOOKW) RETURN 244C !LOOK? 245 I=46 246C !TOMB IS OPEN/CLOSED. 247 IF(QOPEN(TOMB)) I=12 248 CALL RSPSUB(792,I) 249 RETURN 250C 251C R59-- PUZZLE SIDE ROOM 252C 25359000 IF(PRSA.NE.LOOKW) RETURN 254C !LOOK? 255 I=861 256C !ASSUME DOOR CLOSED. 257 IF(CPOUTF) I=862 258C !OPEN? 259 CALL RSPEAK(I) 260C !DESCRIBE. 261 RETURN 262C 263C R60-- PUZZLE ROOM 264C 26560000 IF(PRSA.NE.LOOKW) RETURN 266C !LOOK? 267 IF(CPUSHF) GO TO 60100 268C !STARTED PUZZLE? 269 CALL RSPEAK(868) 270C !NO, DESCRIBE. 271 IF(and(OFLAG2(WARNI),TCHBT).NE.0) CALL RSPEAK(869) 272 RETURN 273C 27460100 CALL CPINFO(880,CPHERE) 275C !DESCRIBE ROOM. 276 RETURN 277C 278 END 279C LOOKTO-- DESCRIBE VIEW IN MIRROR HALLWAY 280C 281C DECLARATIONS 282C 283 SUBROUTINE LOOKTO(NRM,SRM,NT,ST,HT) 284 IMPLICIT INTEGER(A-Z) 285#include "gamestate.h" 286#include "flags.h" 287C LOOKTO, PAGE 2 288C 289 CALL RSPEAK(HT) 290C !DESCRIBE HALL. 291 CALL RSPEAK(NT) 292C !DESCRIBE NORTH VIEW. 293 CALL RSPEAK(ST) 294C !DESCRIBE SOUTH VIEW. 295 DIR=0 296C !ASSUME NO DIRECTION. 297 IF(IABS(MLOC-HERE).NE.1) GO TO 200 298C !MIRROR TO N OR S? 299 IF(MLOC.EQ.NRM) DIR=695 300 IF(MLOC.EQ.SRM) DIR=699 301C !DIR=N/S. 302 IF(MOD(MDIR,180).NE.0) GO TO 100 303C !MIRROR N-S? 304 CALL RSPSUB(847,DIR) 305C !YES, HE SEES PANEL 306 CALL RSPSB2(848,DIR,DIR) 307C !AND NARROW ROOMS. 308 GO TO 200 309C 310100 M1=MRHERE(HERE) 311C !WHICH MIRROR? 312 MRBF=0 313C !ASSUME INTACT. 314 IF(((M1.EQ.1).AND..NOT.MR1F).OR. 315& ((M1.EQ.2).AND..NOT.MR2F)) MRBF=1 316 CALL RSPSUB(849+MRBF,DIR) 317C !DESCRIBE. 318 IF((M1.EQ.1).AND.MROPNF) CALL RSPEAK(823+MRBF) 319 IF(MRBF.NE.0) CALL RSPEAK(851) 320C 321200 I=0 322C !ASSUME NO MORE TO DO. 323 IF((NT.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.699))) I=852 324 IF((ST.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.695))) I=853 325 IF((NT+ST+DIR).EQ.0) I=854 326 IF(HT.NE.0) CALL RSPEAK(I) 327C !DESCRIBE HALLS. 328 RETURN 329C 330 END 331C EWTELL-- DESCRIBE E/W NARROW ROOMS 332C 333C DECLARATIONS 334C 335 SUBROUTINE EWTELL(RM,ST) 336 IMPLICIT INTEGER(A-Z) 337 LOGICAL M1 338C 339C ROOMS 340#include "rindex.h" 341#include "flags.h" 342C EWTELL, PAGE 2 343C 344C NOTE THAT WE ARE EAST OR WEST OF MIRROR, AND 345C MIRROR MUST BE N-S. 346C 347 M1=(MDIR+(MOD(RM-MRAE,2)*180)).EQ.180 348 I=819+MOD(RM-MRAE,2) 349C !GET BASIC E/W STRING. 350 IF((M1.AND..NOT.MR1F).OR.(.NOT.M1.AND..NOT.MR2F)) 351& I=I+2 352 CALL RSPEAK(I) 353 IF(M1.AND.MROPNF) CALL RSPEAK(823+((I-819)/2)) 354 CALL RSPEAK(825) 355 CALL RSPEAK(ST) 356 RETURN 357C 358 END 359