SUBROUTINE RESTAR IMPLICIT INTEGER(A - Z) C C THIS ROUTINE PERFORMS THE ACTIONS REQUIRED EITHER FOR A NEW BOARD, C OR FOR WHEN PACMAN HAS BEEN EATEN. C C 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 C MAZE DIMENSIONS PARAMETER RMAR = 24, CMAR = 53 C BIT SETTINGS FOR DIRECTIONALS AND MSTATE TABLE PARAMETER HALT = 0, UP = 1, DOWN = 2, LEFT = 4, RIGHT = 8 PARAMETER DOT=16, EGZ=32, TUNNEL=64, DECISN="200 PARAMETER SHFIN="17, SHFOUT="16, SPACE="40 C MAZE DRAWING CHARACTERS PARAMETER LRCOR="152, URCOR="153, ULCOR="154, LLCOR="155 PARAMETER CROSS="156, HORIZ="161, DOOR="162, TRIGHT="164 PARAMETER TLEFT="165, TUP="166, TDOWN="167, VERT="170 C DISPLAYABLE CHARACTERS PARAMETER PMAN="52, EGZCHR="146, DOTCHR="176, TUNCHR="137 C BOARD STATE PARAMETER GOOD = 1, BAD = 2, BLINK = 3, EATEN = 4 C QIO FUNCTION CODES PARAMETER IOATA="1410, IOWVB="11000 C INTEGER*4SCORE, TIMER, STATIM, LTIM, CTIM, FTIM, NTIM, FRUON, FRUO *FF INTEGER*2PRL(6), EATSCO(4), FRUSCO(6), FRUDSR(20), FRUDSC(20) BYTE LMAN(3), CMAN(3), FMAN(3), NMAN(3), EATCHR(4), FRUCHR(6) BYTE MSTATE(CMAR, RMAR), MOVE(24, 9), FRUTBL(20) BYTE LN01(CMAR), LN02(CMAR), LN03(CMAR), LN04(CMAR), LN05(CMAR), L *N06(CMAR), LN07(CMAR), LN08(CMAR), LN09(CMAR), LN10(CMAR), LN11(CM *AR), LN12(CMAR), LN13(CMAR), LN14(CMAR), LN15(CMAR), LN16(CMAR), L *N17(CMAR), LN18(CMAR), LN19(CMAR), LN20(CMAR), LN21(CMAR), LN22(CM *AR), LN23(CMAR), LN24(CMAR) C COMMONS COMMON/MAZCOM/LN01, LN02, LN03, LN04, LN05, LN06, LN07, LN08, LN09 *, LN10, LN11, LN12, LN13, LN14, LN15, LN16, LN17, LN18, LN19, LN20 *, LN21, LN22, LN23, LN24 COMMON/MSTCOM/MSTATE COMMON/DIRCOM/NEWDIR, CURDIR COMMON/PACCOM/FDIR, NDIR, LDIR, CDIR, CYCLE, MOVE, SCORE, DOTCNT, *COL, ROW, LCOL, LROW, CCOL, CROW, FCOL, FROW, NCOL, NROW, CYCTIM, *TIMER, BOARD, STATE, STATIM, LTIM, CTIM, FTIM, NTIM, LPRISN, CPRIS *N, FPRISN, NPRISN, LPRISR, LPRISC, CPRISR, CPRISC, FPRISR, FPRISC, * NPRISR, NPRISC, RDOOR, CDOOR, PRITIM, GOODTM, BLNKTM, EATCNT, EAT *CHR, EATSCO, EXTRA, LMAN, CMAN, FMAN, NMAN, PACCNT, INIROW, INICOL *, GAMOVR, FRUIT, FRUTIM, FRULTH, FRUON, FRUOFF, FRUSCO, FRUCHR, FR *UCOL, FRUROW, FRUCNT, FRUDSR, FRUDSC, PRL, FRUTBL, PACDSC, PACDSR, * PACDSD, FRUBRD BYTE BGOOD(6), BBLNK(6) CNO. OF DIAMOND CYCLES DATA BGOOD/40, 40, 30, 30, 20, 10/ CNO. OF CHECKERBOARD CYCLES DATA BBLNK/20, 20, 15, 15, 10, 5/ C C CNO CURRENT MOTION CURDIR = HALT CNO NEW MOTION NEWDIR = HALT CADMIRE OLD BOARD CALL WAIT(2, 2) IF (.NOT.(STATE .NE. EATEN)) GOTO 2000 CIF NEW BOARD... CREINITIALIZE MSTATE TABLE CALL INIT CREDRAW MAZE CALL MAZDRW IF (.NOT.(BOARD .LT. 6)) GOTO 2020 CINCREMENT BOARD COUNT C(MAXIMUM OF SIX BOARDS) BOARD = BOARD + 1 2020 CONTINUE CCLEAR 'FRUIT THIS BOARD' CNT FRUBRD = 0 CGOOD STATE TIME GOODTM = CYCTIM*BGOOD(BOARD) CBLINK STATE TIME BLNKTM = CYCTIM*BBLNK(BOARD) CALL UVT100(CUP, 10, 70) DO 2040 I = 1, PACCNT CSHOW TOTAL PACMEN AVAILABLE CALL GETADR(PRL, PMAN) CALL WTQIO(IOWVB, 2, 2, , , PRL) CALL GETADR(PRL, SPACE) CALL WTQIO(IOWVB, 2, 2, , , PRL) 2040 CONTINUE DO 2060 I = 1, 20 CREDISPLAY CAPTURED FRUIT CALL UVT100(CPP, FRUDSR(I), FRUDSC(I), FRUTBL(I)) 2060 CONTINUE GOTO 2010 2000 CONTINUE CELSE IF JUST EATEN... CALL UVT100(CPP, ROW, COL, SPACE) CREPOSITION PACMAN C C RESTORE CHARACTER WHERE EACH MONSTER WAS (DOT,ENERGIZER, OR SPACE) C CLEFTY CALL UVT100(CUP, LROW, LCOL) IF (.NOT.(TSTBIT(MSTATE(LCOL, LROW), DOT) .EQ. 1)) GOTO 2080 CALL GETADR(PRL, DOTCHR) GOTO 2090 2080 CONTINUE IF (.NOT.(TSTBIT(MSTATE(LCOL, LROW), EGZ) .EQ. 1)) GOTO 2100 CALL GETADR(PRL, EGZCHR) GOTO 2090 2100 CONTINUE CALL GETADR(PRL, SPACE) 2090 CONTINUE CALL WTQIO(IOWVB, 2, 2, , , PRL) CCURLY CALL UVT100(CUP, CROW, CCOL) IF (.NOT.(TSTBIT(MSTATE(CCOL, CROW), DOT) .EQ. 1)) GOTO 2120 CALL GETADR(PRL, DOTCHR) GOTO 2130 2120 CONTINUE IF (.NOT.(TSTBIT(MSTATE(CCOL, CROW), EGZ) .EQ. 1)) GOTO 2140 CALL GETADR(PRL, EGZCHR) GOTO 2130 2140 CONTINUE CALL GETADR(PRL, SPACE) 2130 CONTINUE CALL WTQIO(IOWVB, 2, 2, , , PRL) CFLUFFY CALL UVT100(CUP, FROW, FCOL) IF (.NOT.(TSTBIT(MSTATE(FCOL, FROW), DOT) .EQ. 1)) GOTO 2160 CALL GETADR(PRL, DOTCHR) GOTO 2170 2160 CONTINUE IF (.NOT.(TSTBIT(MSTATE(FCOL, FROW), EGZ) .EQ. 1)) GOTO 2180 CALL GETADR(PRL, EGZCHR) GOTO 2170 2180 CONTINUE CALL GETADR(PRL, SPACE) 2170 CONTINUE CALL WTQIO(IOWVB, 2, 2, , , PRL) CNELLIE CALL UVT100(CUP, NROW, NCOL) IF (.NOT.(TSTBIT(MSTATE(NCOL, NROW), DOT) .EQ. 1)) GOTO 2200 CALL GETADR(PRL, DOTCHR) GOTO 2210 2200 CONTINUE IF (.NOT.(TSTBIT(MSTATE(NCOL, NROW), EGZ) .EQ. 1)) GOTO 2220 CALL GETADR(PRL, EGZCHR) GOTO 2210 2220 CONTINUE CALL GETADR(PRL, SPACE) 2210 CONTINUE CALL WTQIO(IOWVB, 2, 2, , , PRL) 2010 CONTINUE CRESET SYSTEM STATE STATE = BAD CRESET MONSTERS EATEN COUNT EATCNT = 0 CRESET SYSTEM TIMER TIMER = 0 CCLEAR ANY FRUIT DISPLAYED FRUIT = 0 CALL UVT100(CPP, FRUROW, FRUCOL, SPACE) FRUON = TIMER + FRUTIM CRESET MONSTER PRISON TIMES LTIM = (CYCTIM*10) - PRITIM CTIM = (CYCTIM*20) - PRITIM FTIM = (CYCTIM*30) - PRITIM NTIM = (CYCTIM*40) - PRITIM CRESET MONSTERS IN PRISON LPRISN = 1 CPRISN = 1 FPRISN = 1 NPRISN = 1 ROW = INIROW COL = INICOL CPLACE PACMAN AT INITIAL LOC CALL UVT100(CPP, ROW, COL, PMAN) LROW = LPRISR LCOL = LPRISC CDO THE SAME FOR MONSTERS CALL UVT100(CPP, LROW, LCOL, LMAN(STATE)) CROW = CPRISR CCOL = CPRISC CALL UVT100(CPP, CROW, CCOL, CMAN(STATE)) FROW = FPRISR FCOL = FPRISC CALL UVT100(CPP, FROW, FCOL, FMAN(STATE)) NROW = NPRISR NCOL = NPRISC CALL UVT100(CPP, NROW, NCOL, NMAN(STATE)) RETURN END