SUBROUTINE RELEAS C C THIS SUBROUTINE CONTROLS THE RELEASE OF NEW CENTIPEDES, C FLEAS, SPIDERS, AND SCORPIONS ONTO THE SCREEN. C IMPLICIT INTEGER(A - Z) PARAMETER MAXCNT = 24 C SCREEN BOUNDARIES PARAMETER LMAR = 2, RMAR = 30, TMAR = 2, BMAR = 23, GMAR = 18 C DIRECTIONALS PARAMETER HALT = 0, UP = 1, DOWN = 2, LEFT = 4, RIGHT = 8 PARAMETER UPL = 10, UPR = 9, DOWNL = 12, DOWNR = 11 C DISPLAYABLE CHARACTERS PARAMETER GUNCHR="166, CBODY="140, MSHCHR="146, BULCHR="170 PARAMETER SPICHR="173, FLECHR="175, SCOCHR="142, PSNCHR="052 PARAMETER CLHEAD="074, CRHEAD="076, CDHEAD="126 PARAMETER SHFIN="17, SHFOUT="16, SPACE="40 C QIO FUNCTION CODES PARAMETER IOATA="1410, IOWVB="11000, SFSMC="2440 C INTEGER*4SCORE, FRESCO, TIMER, SEED, FLETIM, SPITIM, SCOTIM, CNTTI *M DIMENSION PRL(6), CX(MAXCNT, 12), CY(MAXCNT, 12) DIMENSION CLEN(MAXCNT), CDIR(MAXCNT), CRISE(MAXCNT), CBOT(MAXCNT) BYTE CNTBRD(BMAR, RMAR), MSHBRD(BMAR, RMAR), PSNBRD(BMAR, RMAR) COMMON/DIRCOM/DIRCOD, FIRCOD COMMON/CNTCOM/PRL, SCORE, TIMER, SEED, CX, CY, CLEN, CDIR, CRISE, *CBOT, GUNX, GUNY, FRESCO, CNTBRD, MSHBRD, PSNBRD, BULACT, BULX, BU *LY, FLETIM, FLEACT, FLEX, FLEY, SPITIM, SPIACT, SPIX, SPIY, SPILR, * SCOTIM, SCOACT, SCOX, SCOY, SCODIR, GUNCNT, CNTTIM, BOARD, CNTWAV C C VT100 DISPLAY CONTROL PARAMETER DEFINITIONS C CCURSOR POSITION REPORT CCURSOR UP CCURSOR DOWN CCURSOR FORWARD CCURSOR BACK CDOUBLE WIDTH LINE PARAMETER CUP = 1, CUU = 2, CUD = 3, CUF = 4, CUB = 5, DECDWL = 6, * DECDHL = 7, DECRC = 8, DECSC = 9, DECSWL = 10, ED = 11, EL = 12, *SGR = 13, NEL = 14, SCS = 15, SM = 16, RM = 17, ANSI = 18, CPP=19 REAL X, RAN DATA ZONCNT/30/ C C CENTIPEDES (THE FIRST CENTIPEDE OF A BOARD IS RELEASED BY SUBROUTINE C 'START'. ALL CENTIPEDES AFTER THE FIRST ARE ONE SEGMENT LONG) C IF (.NOT.(CNTTIM .GT. 0.AND.CNTTIM .LE. TIMER)) GOTO 2000 X = RAN(SEED) RAND = X*2 DO 2020 I = 1, MAXCNT CSEARCH CENTIPEDE TABLE FOR EMPTY SLOT IF (.NOT.(CLEN(I) .NE. 0)) GOTO 2040 CTHIS SLOT IN USE GOTO 2020 2040 CONTINUE IF (.NOT.(CNTWAV .GT. 0)) GOTO 2060 CCENTIPEDE STARTS AT TOP OF SCREEN CX(I, 1) = TMAR GOTO 2070 2060 CONTINUE CCENTIPEDE STARTS AT TOP OF PLAYERZONE CX(I, 1) = GMAR 2070 CONTINUE CCENTIPEDE IS ONE SEGMENT LONG CLEN(I) = 1 CAND DESCENDING CRISE(I) = 1 IF (.NOT.(RAND .EQ. 0)) GOTO 2080 CSTART AT RIGHT OR LEFT EDGE (RANDOM) CY(I, 1) = LMAR CDIR(I) = RIGHT GOTO 2090 2080 CONTINUE CY(I, 1) = RMAR CDIR(I) = LEFT 2090 CONTINUE IF (.NOT.(CDIR(I) .EQ. LEFT)) GOTO 2100 CDISPLAY IT CALL UVT100(CPP, CX(I, 1), CY(I, 1), CLHEAD) GOTO 2110 2100 CONTINUE CALL UVT100(CPP, CX(I, 1), CY(I, 1), CRHEAD) 2110 CONTINUE GOTO 2030 2020 CONTINUE 2030 CONTINUE IF (.NOT.(CNTWAV .GT. 0)) GOTO 2120 CRELEASE ANOTHER CENTIPEDE IF (.NOT.(SCORE .GT. 40000)) GOTO 2140 CFROM TOP OF SCREEN. CZONCNT IS USED TO TIME RELEASES ZONCNT = 10 GOTO 2150 2140 CONTINUE IF (.NOT.(SCORE .GT. 30000)) GOTO 2160 CBASED ON THE PLAYER'S SCORE. CWHEN ALL CENTIPEDES OF THIS BOARD ZONCNT = 15 GOTO 2150 2160 CONTINUE IF (.NOT.(SCORE .GT. 20000)) GOTO 2180 CHAVE BEEN RELEASED AND REACHED BOTTOM COF PLAYER'S ZONE, NEW ONES ARE ZONCNT = 20 GOTO 2150 2180 CONTINUE IF (.NOT.(SCORE .GT. 10000)) GOTO 2200 CRELEASED FROM THE TOP OF THE ZONE. ZONCNT = 25 GOTO 2150 2200 CONTINUE ZONCNT = 30 2150 CONTINUE CCNTWAV IS THE NUMBER OF CENTIPEDES CNTWAV = CNTWAV - 1 IF (.NOT.(CNTWAV .GT. 0)) GOTO 2220 CLEFT TO BE RELEASED FROM SCREEN TOP. CNTTIM = TIMER + (ZONCNT - 5) GOTO 2230 2220 CONTINUE CLAST CENTIPEDE FROM TOP OF SCREEN CNTTIM = 0 2230 CONTINUE GOTO 2130 2120 CONTINUE CALL CENTIPEDES HAVE BEEN RELEASED. IF (.NOT.(ZONCNT .GT. 0)) GOTO 2240 CCALCULATE RELEASE TIME FOR NEXT CCENTIPEDE IN PLAYER'S ZONE. ZONCNT = ZONCNT - 1 2240 CONTINUE CNTTIM = TIMER + ((ZONCNT/5 + 1)*10) 2130 CONTINUE C C FLEA C 2000 CONTINUE IF (.NOT.(FLETIM .GT. 0.AND.FLEACT .EQ. 0.AND.FLETIM .LE. TIMER)) *GOTO 2260 X = RAN(SEED) CSTART AT TOP OF SCREEN FLEX = TMAR CRANDOM COLUMN FLEY = (X*(RMAR - LMAR + 1)) + LMAR FLEACT = 1 CDISPLAY HIM CALL UVT100(CPP, FLEX, FLEY, FLECHR) C C SPIDER C 2260 CONTINUE IF (.NOT.(SPITIM .GT. 0.AND.SPIACT .EQ. 0.AND.SPITIM .LE. TIMER)) *GOTO 2280 X = RAN(SEED) RAND = X*2 SPIX = GMAR IF (.NOT.(RAND .EQ. 0)) GOTO 2300 CMOVES RIGHT TO LEFT OR LEFT TO RIGHT C(RANDOM) SPIY = LMAR SPILR = RIGHT GOTO 2310 2300 CONTINUE SPIY = RMAR SPILR = LEFT 2310 CONTINUE SPIACT = 1 CDISPLAY HIM CALL UVT100(CPP, SPIX, SPIY, SPICHR) C C SCORPION C 2280 CONTINUE IF (.NOT.(SCOTIM .GT. 0.AND.SCOACT .EQ. 0.AND.SCOTIM .LE. TIMER)) *GOTO 2320 X = RAN(SEED) CSCORPION APPEARS ON TOP TEN ROWS SCOX = (X*9) + TMAR + 1 C(EXCEPT NOT ON VERY TOP ROW) X = RAN(SEED) RAND = X*2 IF (.NOT.(RAND .EQ. 0)) GOTO 2340 CMOVES RIGHT TO LEFT OR LEFT TO RIGHT C(RANDOM) SCOY = LMAR SCODIR = RIGHT GOTO 2350 2340 CONTINUE SCOY = RMAR SCODIR = LEFT 2350 CONTINUE CDISPLAY HIM CALL UVT100(CPP, SCOX, SCOY, SCOCHR) SCOACT = 1 2320 CONTINUE RETURN END