SUBROUTINE RESTAR IMPLICIT INTEGER (A-Z) # # THIS ROUTINE PERFORMS THE ACTIONS REQUIRED EITHER FOR A NEW BOARD, # OR FOR WHEN PACMAN HAS BEEN EATEN. # # INCLUDE/NL SY:UVT100.DAT INCLUDE/NL SY:PACMAN.CMN BYTE BGOOD(6),BBLNK(6),XCYCLE(6) DATA BGOOD / 30,28,24,22,16,10 / #NO. OF DIAMOND CYCLES DATA BBLNK / 15,14,13,12,8,6 / #NO. OF CHECKERBOARD CYCLES DATA XCYCLE / 7,6,6,6,5,4 / #NO. OF CYCLES FOR TIMER CURDIR = HALT #NO CURRENT MOTION NEWDIR = HALT #NO NEW MOTION CALL GETADR(PRL,OUTBUF) PRL(2) = LEN CALL WTQIO(IOWVB,5,2,,,PRL) #UPDATE BOARD DISPLAY LEN = 0 CALL WAIT(2,2) #ADMIRE OLD BOARD IF (STATE != EATEN) [ #IF NEW BOARD... CALL INIT #REINITIALIZE MSTATE TABLE CALL MAZDRW #REDRAW MAZE IF (BOARD < 6) #INCREMENT BOARD COUNT BOARD = BOARD + 1 #(MAXIMUM OF SIX BOARDS) CYCTIM = XCYCLE(BOARD) #RESET CYCLE TIME PRITIM = CYCTIM * 30 #RESET IN PRISON TIME FRUTIM = CYCTIM * 250 #DELAY TIME FOR FRUIT FRULTH = CYCTIM * 70 #TIME FRUIT STAYS DISPLAYED FRUBRD = 0 #CLEAR 'FRUIT THIS BOARD' CNT GOODTM = CYCTIM * BGOOD(BOARD) #GOOD STATE TIME BLNKTM = CYCTIM * BBLNK(BOARD) #BLINK STATE TIME CALL UVT100(CUP,10,70) DO I = 1,PACCNT [ #SHOW TOTAL PACMEN AVAILABLE OUTBUF(LEN+1) = PMAN LEN = LEN + 1 OUTBUF(LEN+1) = SPACE LEN = LEN + 1 ] DO I = 1,20 [ #REDISPLAY CAPTURED FRUIT CALL UVT100(CUP,FRUDSR(I),FRUDSC(I)) OUTBUF(LEN+1) = FRUTBL(I) LEN = LEN + 1 ] ] ELSE [ #ELSE IF JUST EATEN... CALL UVT100(CUP,ROW,COL) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 # # RESTORE CHARACTER WHERE EACH MONSTER WAS (DOT,ENERGIZER, OR SPACE) # CALL UVT100(CUP,LROW,LCOL) #LEFTY IF (TSTBIT(MSTATE(LCOL,LROW),DOT) == 1) [ OUTBUF(LEN+1) = DOTCHR LEN = LEN + 1 ] ELSE IF (TSTBIT(MSTATE(LCOL,LROW),EGZ) == 1) [ OUTBUF(LEN+1) = EGZCHR LEN = LEN + 1 ] ELSE [ OUTBUF(LEN+1) = SPACE LEN = LEN + 1 ] CALL UVT100(CUP,CROW,CCOL) #CURLY IF (TSTBIT(MSTATE(CCOL,CROW),DOT) == 1) [ OUTBUF(LEN+1) = DOTCHR LEN = LEN + 1 ] ELSE IF (TSTBIT(MSTATE(CCOL,CROW),EGZ) == 1) [ OUTBUF(LEN+1) = EGZCHR LEN = LEN + 1 ] ELSE [ OUTBUF(LEN+1) = SPACE LEN = LEN + 1 ] CALL UVT100(CUP,FROW,FCOL) #FLUFFY IF (TSTBIT(MSTATE(FCOL,FROW),DOT) == 1) [ OUTBUF(LEN+1) = DOTCHR LEN = LEN + 1 ] ELSE IF (TSTBIT(MSTATE(FCOL,FROW),EGZ) == 1) [ OUTBUF(LEN+1) = EGZCHR LEN = LEN + 1 ] ELSE [ OUTBUF(LEN+1) = SPACE LEN = LEN + 1 ] CALL UVT100(CUP,NROW,NCOL) #NELLIE IF (TSTBIT(MSTATE(NCOL,NROW),DOT) == 1) [ OUTBUF(LEN+1) = DOTCHR LEN = LEN + 1 ] ELSE IF (TSTBIT(MSTATE(NCOL,NROW),EGZ) == 1) [ OUTBUF(LEN+1) = EGZCHR LEN = LEN + 1 ] ELSE [ OUTBUF(LEN+1) = SPACE LEN = LEN + 1 ] ] STATE = BAD #RESET SYSTEM STATE EATCNT = 0 #RESET MONSTERS EATEN COUNT TIMER = 0 #RESET SYSTEM TIMER FRUIT = 0 #CLEAR ANY FRUIT DISPLAYED CALL UVT100(CUP,FRUROW,FRUCOL) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 FRUON = TIMER + FRUTIM LTIM = (CYCTIM * 10) - PRITIM #RESET MONSTER PRISON TIMES CTIM = (CYCTIM * 20) - PRITIM FTIM = (CYCTIM * 30) - PRITIM NTIM = (CYCTIM * 40) - PRITIM LPRISN = 1 #RESET MONSTERS IN PRISON CPRISN = 1 FPRISN = 1 NPRISN = 1 ROW = INIROW COL = INICOL CALL UVT100(CUP,ROW,COL) #PLACE PACMAN AT INITIAL LOC OUTBUF(LEN+1) = PMAN LEN = LEN + 1 LROW = LPRISR LCOL = LPRISC CALL UVT100(CUP,LROW,LCOL) #DO THE SAME FOR MONSTERS OUTBUF(LEN+1) = LMAN(STATE) LEN = LEN + 1 CROW = CPRISR CCOL = CPRISC CALL UVT100(CUP,CROW,CCOL) OUTBUF(LEN+1) = CMAN(STATE) LEN = LEN + 1 FROW = FPRISR FCOL = FPRISC CALL UVT100(CUP,FROW,FCOL) OUTBUF(LEN+1) = FMAN(STATE) LEN = LEN + 1 NROW = NPRISR NCOL = NPRISC CALL UVT100(CUP,NROW,NCOL) OUTBUF(LEN+1) = NMAN(STATE) LEN = LEN + 1 RETURN END