C NOBJS- NEW OBJECTS PROCESSOR
C OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
C MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
C WRITTEN BY R. M. SUPNIK
LOGICAL FUNCTION NOBJS(RI,ARG)
LOGICAL QHERE,OPNCLS,MIRPAN
C MISCELLANEOUS VARIABLES
QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,
& 10000,11000,12000,13000,14000,15000,16000,17000,
& 18000,19000,20000,21000),
C RETURN HERE TO DECLARE FALSE RESULT
1000 IF(PRSA.NE.EATW) GO TO 1100
1100 IF(PRSA.EQ.BURNW) CALL RSPEAK(640)
2100 IF(PRSO.NE.TARGET) GO TO 2400
IF((PRSA.NE.PUSHW).AND.(PRSA.NE.MOVEW).AND.
& (PRSA.NE.TAKEW).AND.(PRSA.NE.RUBW)) GO TO 2200
2200 IF((PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW).AND.
& (PRSA.NE.MUNGW)) GO TO 2400
2400 IF((PRSA.NE.THROWW).OR.(PRSI.NE.TARGET)) GO TO 10
IF(HERE.EQ.BKBOX) GO TO 2600
CALL NEWSTA(PRSO,0,BKBOX,0,0)
2600 IF(SCOLRM.EQ.0) GO TO 2900
CALL NEWSTA(PRSO,0,SCOLRM,0,0)
3000 IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 3200
IF(OTVAL(PRSO).NE.0) GO TO 3100
CALL NEWSTA(PRSO,641,0,0,0)
3100 CALL NEWSTA(PRSO,0,0,0,0)
C !YES, BYE BYE TREASURE.
CALL NEWSTA(ZGNOM,0,0,0,0)
3200 IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
& (PRSA.NE.MUNGW)) GO TO 3300
CALL NEWSTA(ZGNOM,643,0,0,0)
4000 IF((PRSA.NE.OPENW).OR.(PRSO.NE.EGG)) GO TO 4500
IF(.NOT.QOPEN(EGG)) GO TO 4100
4100 IF(PRSI.NE.0) GO TO 4200
4200 IF(PRSI.NE.HANDS) GO TO 4300
IF((and(OFLAG1(PRSI),TOOLBT).NE.0).OR.
& (and(OFLAG2(PRSI),WEAPBT).NE.0)) GO TO 4600
IF(and(OFLAG2(PRSO),FITEBT).NE.0) I=654
OFLAG2(PRSO)=or(OFLAG2(PRSO),FITEBT)
4500 IF((PRSA.NE.OPENW).AND.(PRSA.NE.MUNGW)) GO TO 4800
4600 CALL NEWSTA(BEGG,I,OROOM(EGG),OCAN(EGG),OADV(EGG))
IF(OCAN(CANAR).NE.EGG) GO TO 4700
CALL RSPEAK(ODESCO(BCANA))
4700 CALL NEWSTA(BCANA,0,0,0,0)
4800 IF((PRSA.NE.DROPW).OR.(HERE.NE.MTREE)) GO TO 10
CALL NEWSTA(BEGG,658,FORE3,0,0)
IF(OCAN(CANAR).NE.EGG) GO TO 4700
C O36-- CANARIES, GOOD AND BAD
5000 IF(PRSA.NE.WINDW) GO TO 10
IF(PRSO.EQ.CANAR) GO TO 5100
5100 IF(.NOT.SINGSF.AND.((HERE.EQ.MTREE).OR.
& ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR))))
CALL NEWSTA(BAUBL,647,I,0,0)
6000 IF((PRSA.NE.CLMBW).AND.(PRSA.NE.CLMBUW).AND.
& (PRSA.NE.CLMBDW)) GO TO 10
7000 IF((IABS(HERE-MLOC).NE.1).OR.(MRHERE(HERE).NE.0).OR.
& (PRSA.NE.PUSHW)) GO TO 7100
7100 IF(and(RFLAG(HERE),RNWALL).EQ.0) GO TO 10
8000 IF(PRSA.NE.FINDW) GO TO 8100
8100 IF(PRSA.NE.EXAMIW) GO TO 10
C O40-- PUZZLE/SCOL WALLS
9000 IF(HERE.NE.CPUZZ) GO TO 9500
IF(PRSA.NE.PUSHW) GO TO 10
IF(PRSO.EQ.CPWL(I)) GO TO 9200
C !GET DIRECTIONAL OFFSET.
GO TO (9300,9300,9300,9250,9350),(WL+4)
9300 IF(CPVEC(NXT+J).EQ.0) GO TO 9400
C !MOVABLE, ROOM TO MOVE?
RFLAG(HERE)=or(RFLAG(HERE),RSEEN)
9500 IF(HERE.NE.SCOLAC) GO TO 9700
IF(SCOLWL(I).EQ.HERE) GO TO 2100
9700 IF(HERE.NE.BKBOX) GO TO 10
10000 IF(PRSA.NE.RAISEW) GO TO 10100
10100 IF((PRSA.NE.LOWERW).AND.(PRSA.NE.PUSHW)) GO TO 10
IF(POLEUF.NE.0) GO TO 10200
10200 IF(MOD(MDIR,180).NE.0) GO TO 10300
10300 IF((MDIR.NE.270).OR.(MLOC.NE.MRB)) GO TO 10400
10400 CALL RSPEAK(753+POLEUF)
11000 IF(PRSA.NE.PUSHW) GO TO 10
IF(QHERE(I,MREYE).AND.(I.NE.RBEAM)) GO TO 11200
11200 CFLAG(CEVMRS)=.TRUE.
12000 IF((PRSA.NE.TAKEW).OR.(PRSO.NE.RBEAM)) GO TO 12100
C !ASSUME BLK WITH DIROBJ.
IF((PRSA.EQ.PUTW).AND.(PRSI.EQ.RBEAM)) GO TO 12200
IF((PRSA.NE.MUNGW).OR.(PRSO.NE.RBEAM).OR.
12200 IF(OADV(I).NE.WINNER) GO TO 12300
CALL NEWSTA(I,0,HERE,0,0)
CALL RSPSUB(760,ODESC2(I))
13000 IF((HERE.EQ.NCELL).OR.((LCELL.EQ.4).AND.
& ((HERE.EQ.CELL).OR.(HERE.EQ.SCORR))))
13100 IF(.NOT.OPNCLS(ODOOR,764,765)) GO TO 10
IF((HERE.EQ.NCELL).AND.QOPEN(ODOOR))
14000 IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 14100
14100 IF(PRSA.NE.KNOCKW) GO TO 10
15000 IF(PRSA.NE.OPENW) GO TO 10
16000 NOBJS=OPNCLS(CDOOR,779,780)
17000 IF(PRSA.NE.PUSHW) GO TO 10
IF(QOPEN(CDOOR)) CALL RSPEAK(810)
C !RELOCATE OLD TO HYPER.
IF((OROOM(I).EQ.CELL).AND.(and(OFLAG1(I),DOORBT).EQ.0))
& CALL NEWSTA(I,0,LCELL*HFACTR,0,0)
IF(OROOM(I).EQ.(PNUMB*HFACTR))
& CALL NEWSTA(I,0,CELL,0,0)
OFLAG2(ODOOR)=and(OFLAG2(ODOOR), not(OPENBT))
OFLAG2(CDOOR)=and(OFLAG2(CDOOR), not(OPENBT))
OFLAG1(ODOOR)=and(OFLAG1(ODOOR), not(VISIBT))
IF(PNUMB.EQ.4) OFLAG1(ODOOR)=or(OFLAG1(ODOOR),VISIBT)
IF(AROOM(PLAYER).NE.CELL) GO TO 17400
IF(LCELL.NE.4) GO TO 17200
OFLAG1(ODOOR)=or(OFLAG1(ODOOR), VISIBT)
17200 F=MOVETO(PCELL,PLAYER)
18000 IF(PRSA.NE.SPINW) GO TO 18100
CALL RSPSUB(797,712+PNUMB)
18100 IF((PRSA.NE.MOVEW).AND.(PRSA.NE.PUTW).AND.
& (PRSA.NE.TRNTOW)) GO TO 10
IF(PRSI.NE.0) GO TO 18200
18200 IF((PRSI.GE.NUM1).AND.(PRSI.LE.NUM8)) GO TO 18300
CALL RSPSUB(808,712+PNUMB)
19000 NOBJS=MIRPAN(832,.FALSE.)
20000 IF(HERE.NE.FDOOR) GO TO 20100
IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
20100 NOBJS=MIRPAN(838,.TRUE.)
21000 IF((PRSA.NE.PUTW).OR.(PRSI.NE.CSLIT)) GO TO 10
IF(PRSO.NE.GCARD) GO TO 21100
CALL NEWSTA(PRSO,863,0,0,0)
OFLAG1(STLDR)=and(OFLAG1(STLDR),not(VISIBT))
21100 IF((and(OFLAG1(PRSO),VICTBT).EQ.0).AND.
& (and(OFLAG2(PRSO),VILLBT).EQ.0)) GO TO 21200
21200 CALL NEWSTA(PRSO,0,0,0,0)
C MIRPAN-- PROCESSOR FOR GLOBAL MIRROR/PANEL
LOGICAL FUNCTION MIRPAN(ST,PNF)
IF(((NUM.EQ.1).AND..NOT.MR1F).OR.
& ((NUM.EQ.2).AND..NOT.MR2F)) MRBF=1
IF((PRSA.NE.MOVEW).AND.(PRSA.NE.OPENW)) GO TO 200
200 IF(PNF.OR.((PRSA.NE.LOOKIW).AND.(PRSA.NE.EXAMIW).AND.
& (PRSA.NE.LOOKW))) GO TO 300
300 IF(PRSA.NE.MUNGW) GO TO 400
IF((NUM.EQ.1).AND..NOT.PNF) MR1F=.FALSE.
IF((NUM.EQ.2).AND..NOT.PNF) MR2F=.FALSE.
400 IF(PNF.OR.(MRBF.EQ.0)) GO TO 500
500 IF(PRSA.NE.PUSHW) GO TO 600