SUBROUTINE RELEAS # # THIS SUBROUTINE CONTROLS THE RELEASE OF NEW CENTIPEDES, # FLEAS, SPIDERS, AND SCORPIONS ONTO THE SCREEN. # IMPLICIT INTEGER (A-Z) INCLUDE SY:CNTPED.CMN INCLUDE SY:UVT100.DAT REAL X,RAN DATA ZONCNT / 30 / # # CENTIPEDES (THE FIRST CENTIPEDE OF A BOARD IS RELEASED BY SUBROUTINE # 'START'. ALL CENTIPEDES AFTER THE FIRST ARE ONE SEGMENT LONG) # IF (CNTTIM > 0 .AND. CNTTIM <= TIMER) [ X = RAN(SEED) RAND = X * 2 DO I = 1,MAXCNT [ #SEARCH CENTIPEDE TABLE FOR EMPTY SLOT IF (CLEN(I) != 0) NEXT #THIS SLOT IN USE IF (CNTWAV > 0) CX(I,1) = TMAR #CENTIPEDE STARTS AT TOP OF SCREEN ELSE CX(I,1) = GMAR #CENTIPEDE STARTS AT TOP OF PLAYERZONE CLEN(I) = 1 #CENTIPEDE IS ONE SEGMENT LONG CRISE(I) = 1 #AND DESCENDING IF (RAND == 0) [ #START AT RIGHT OR LEFT EDGE (RANDOM) CY(I,1) = LMAR CDIR(I) = RIGHT ] ELSE [ CY(I,1) = RMAR CDIR(I) = LEFT ] CALL UVT100(CUP,CX(I,1),CY(I,1)) IF (CDIR(I) == LEFT) #DISPLAY IT CALL GETADR(PRL,CLHEAD) ELSE CALL GETADR(PRL,CRHEAD) CALL WTQIO(IOWVB,5,2,,,PRL) BREAK ] IF (CNTWAV > 0) [ #RELEASE ANOTHER CENTIPEDE IF (SCORE > 40000) #FROM TOP OF SCREEN. ZONCNT = 10 #ZONCNT IS USED TO TIME RELEASES ELSE IF (SCORE > 30000) #BASED ON THE PLAYER'S SCORE. ZONCNT = 15 #WHEN ALL CENTIPEDES OF THIS BOARD ELSE IF (SCORE > 20000) #HAVE BEEN RELEASED AND REACHED BOTTOM ZONCNT = 20 #OF PLAYER'S ZONE, NEW ONES ARE ELSE IF (SCORE > 10000) #RELEASED FROM THE TOP OF THE ZONE. ZONCNT = 25 ELSE ZONCNT = 30 CNTWAV = CNTWAV - 1 #CNTWAV IS THE NUMBER OF CENTIPEDES IF (CNTWAV > 0) #LEFT TO BE RELEASED FROM SCREEN TOP. CNTTIM = TIMER + (ZONCNT-5) ELSE CNTTIM = 0 #LAST CENTIPEDE FROM TOP OF SCREEN ] ELSE [ #ALL CENTIPEDES HAVE BEEN RELEASED. IF (ZONCNT > 0) #CALCULATE RELEASE TIME FOR NEXT ZONCNT = ZONCNT - 1 #CENTIPEDE IN PLAYER'S ZONE. CNTTIM = TIMER + ((ZONCNT/5+1) * 10) ] ] # # FLEA # IF (FLETIM > 0 .AND. FLEACT == 0 .AND. FLETIM <= TIMER) [ X = RAN(SEED) FLEX = TMAR #START AT TOP OF SCREEN FLEY = (X * (RMAR-LMAR+1)) + LMAR #RANDOM COLUMN FLEACT = 1 CALL UVT100(CUP,FLEX,FLEY) #DISPLAY HIM CALL GETADR(PRL,FLECHR) CALL WTQIO(IOWVB,5,2,,,PRL) ] # # SPIDER # IF (SPITIM > 0 .AND. SPIACT == 0 .AND. SPITIM <= TIMER) [ X = RAN(SEED) RAND = X * 2 SPIX = GMAR IF (RAND == 0) [ #MOVES RIGHT TO LEFT OR LEFT TO RIGHT SPIY = LMAR #(RANDOM) SPILR = RIGHT ] ELSE [ SPIY = RMAR SPILR = LEFT ] SPIACT = 1 CALL UVT100(CUP,SPIX,SPIY) #DISPLAY HIM CALL GETADR(PRL,SPICHR) CALL WTQIO(IOWVB,5,2,,,PRL) ] # # SCORPION # IF (SCOTIM > 0 .AND. SCOACT == 0 .AND. SCOTIM <= TIMER) [ X = RAN(SEED) SCOX = (X * 9) + TMAR + 1 #SCORPION APPEARS ON TOP TEN ROWS X = RAN(SEED) #(EXCEPT NOT ON VERY TOP ROW) RAND = X * 2 IF (RAND == 0) [ #MOVES RIGHT TO LEFT OR LEFT TO RIGHT SCOY = LMAR #(RANDOM) SCODIR = RIGHT ] ELSE [ SCOY = RMAR SCODIR = LEFT ] CALL UVT100(CUP,SCOX,SCOY) #DISPLAY HIM CALL GETADR(PRL,SCOCHR) CALL WTQIO(IOWVB,5,2,,,PRL) SCOACT = 1 ] RETURN END