C-------INCLUDE FILE ARRAYS.INC-------------------------- C C Screen definition parameters PARAMETER SCREEN_MINX = 2, ! Top displayable line 1 SCREEN_MAXX = 45, ! Bottom displayable line 2 SCREEN_MINY = 2, ! Left displayable column 3 SCREEN_MAXY = 21, ! Right displayable column 4 SCREEN_BOTT = 24, ! Lowest line on VT100 5 MILLI_UPLIM = 16, ! Upward reflection limit for milli 6 GUN_UPLIM = 17, ! Highest line gun can move to 7 BOMB_DELX = 10, ! Max # of columns bomb can be from gun 6 SCROLL_TOP = SCREEN_MAXY + 2, ! Top of scroll region below box 7 BORDER_MINX = SCREEN_MINX - 1, ! Left border column 8 BORDER_MAXX = SCREEN_MAXX + 1, ! Right border column 9 BORDER_MINY = SCREEN_MINY - 1, ! Top border line A BORDER_MAXY = SCREEN_MAXY + 1 ! Bottom border line PARAMETER SCORE_TEXT_X = 70, ! 'SCORE' starting column 1 SCORE_TEXT_Y = 5, ! 'SCORE' line 2 SCORE_VALU_X = 70, ! Score value starting column 3 SCORE_VALU_Y = 7, ! Score value line 4 LIVES_TEXT_X = 70, ! 'LIVES' starting column 5 LIVES_TEXT_Y = 10, ! 'LIVES' line 6 LIVES_VALU_X = 74, ! Lives value starting column 7 LIVES_VALU_Y = 12, ! Lives value line 8 NULIF_TEXT_X = 70, ! 'BONUS' starting column 9 NULIF_TEXT_X2= 71, ! 'LIFE' starting column 9 NULIF_TEXT_Y1= 15, ! 'BONUS' line A NULIF_TEXT_Y2= 16, ! 'LIFE' line B NULIF_TEXT_Y3= 17, ! 'AFTER' line C NULIF_VALU_Y = 18, ! Bonus value line D NULIF_TEXT_Y4= 19 ! 'POINTS' line PARAMETER GUN_INIT_X = ((SCREEN_MAXX + SCREEN_MINX)/2), ! Initial gun X 1 GUN_INIT_Y = ((SCREEN_MAXY + GUN_UPLIM)/2) ! Initial gun Y PARAMETER CURSOR_ADDR_ESC = 8, ! See DRAWFIXED routine for these 1 BORDER_ROWS = BORDER_MAXY - BORDER_MINY - 1, 2 BORDER_COLS = BORDER_MAXX - BORDER_MINX + 1, 3 BORDER_TOP_BOT = 2*(CURSOR_ADDR_ESC + BORDER_COLS), 4 BORDER_MIDDLE = BORDER_ROWS*(2*(CURSOR_ADDR_ESC + 1)), 5 BORDER_BUF_SIZ = BORDER_MIDDLE + BORDER_TOP_BOT + 6 C C IO write function codes and output buffer C PARAMETER IO$_WRITEVBLK = 48, 1 IO$M_CANCTRLO = 64, 2 WRITE_FUNC = IO$_WRITEVBLK + IO$M_CANCTRLO, 3 NO_CARRIAGE_CONTROL = 0 PARAMETER VTBUFF_SIZE = 800, ! Output buffer size 1 END_VTBUFF = VTBUFF_SIZE - CURSOR_ADDR_ESC - 4 PARAMETER CHAR_BARR = '+', ! Barrier 1 CHAR_BULL = '^', ! Bullet 2 CHAR_GUN = 'A', ! Gun 3 CHAR_SEG = '*', ! Millipede segment 4 CHAR_SPID = 'M', ! Spider 5 CHAR_DRAG = '$', ! Dragon 6 CHAR_BOMB = 'v', ! Bomb 7 CHAR_HITSPID = '#', ! Dead spider 8 CHAR_HITDRAG = '@', ! Dead dragon 9 CHAR_HITBOMB = '=', ! Dead bomb A CHAR_HITGUN = 'X', ! Dead gun B CHAR_BELL = 7 ! Bell for WRTSCR PARAMETER IDX_SPID = 1, ! Spider 1 IDX_DRAG = 2, ! Dragon special target index 2 IDX_BOMB = 3 ! Bomb special target index PARAMETER EFN_WRITE = 1, ! Event flag for QIO writes 1 EFN_QUANTIMR = 5, ! Event flag for cycle timer 2 EFN_KILLEDTIMR = 6, ! Event flag for waits 3 EFN_TARGTIMR = 7, ! Event flag for target timer 4 EFN_READ = 8 ! Event flag for QIO reads C C Lower and upper limits for random number calls C PARAMETER RANL_NEWBARR = 2, ! Number of hits to destroy barrier 1 RANU_NEWBARR = 5, 2 RANL_SPINIT = 1, ! Index to spider init values 3 RANU_SPINIT = 4, 4 RANL_SPIUP = MILLI_UPLIM - 1, ! Line for spider upward bounce 5 RANU_SPIUP = GUN_UPLIM + 1, 6 RANL_SPIDELX = 1, ! Delta X for spider bounce 7 RANU_SPIDELX = 8, 8 RANL_TARGTIM = 5, ! Special target delay to release 9 RANU_TARGTIM = 15, A RANL_DRAGY = 4, ! Y coord of dragon B RANU_DRAGY = 8, C RANL_DRAGS = 1, ! 1/100 of dragon score D RANU_DRAGS = 3 C C Scores for hitting various things C PARAMETER SCOR_HITSEG = 25, ! Single segment millipede 1 SCOR_HITBARR = 3, ! Barrier single hit 2 SCOR_HITSPID = 40, ! Spider 3 SCOR_HITHEAD = 55, ! Bonus for hit on milli head segment 4 SCOR_HITBOMB = 80 ! Bomb C C Barrier and screen arrays - dimensions are related to size of the 'playing C field' on the VT100 C BYTE BARR_ARY(BORDER_MINX:BORDER_MAXX, 1 BORDER_MINY:BORDER_MAXY) C BYTE SCREEN_ARY(SCREEN_MINX:SCREEN_MAXX, BYTE SCREEN_ARY(1:SCREEN_MAXX, 1 BORDER_MINY:SCREEN_MAXY,2) INTEGER*4 POINT_OLD,POINT_NEW ! Flip-flop pointers for out buf, etc. BYTE BARR_CHARS(0:9) ! Barrier characters (see BARRSCR) DATA BARR_CHARS / ' ',9*CHAR_BARR / BYTE VTBUFF(VTBUFF_SIZE) ! Output buffer INTEGER*2 ICHAN ! Channel to VT100 REAL*4 SEED ! Random number generator seed INTEGER*4 QUANTUM ! Update cycle time COMMON / ARRAYS / POINT_OLD,POINT_NEW,QUANTUM,SEED,ICHAN, 1 BARR_ARY,SCREEN_ARY,BARR_CHARS,VTBUFF C C Millipede and segment arrays - M_ are item indices to millipede array, C S_ are item indices to segment array C PARAMETER MAX_SEG = 20, ! Dimension of segment array 1 MAX_MILLI = MAX_SEG, ! Dimension of millipede array 2 M_FLINK = 1, ! Forward link to next millipede 3 M_XDIR = 2, ! X direction of movement 4 M_YDIR = 3, ! Y direction of movement 5 M_HEADPT = 4, ! Pointer to segment array for head 6 M_TAILPT = 5, ! Pointer to segment array for tail 7 M_SPARE0 = 6, ! Spare 8 M_SPARE1 = 7, ! Spare 9 M_SPARE2 = 8, ! Spare A S_FLINK = 1, ! Forward link to next segment B S_XLOC = 2, ! X location of segment C S_YLOC = 3, ! Y location of segment D S_SPARE = 4 ! Spare BYTE MI_ARY(8,MAX_MILLI) ! Millipede array BYTE SE_ARY(4,MAX_SEG) ! Segment array BYTE MI_LISTHEAD,MI_FREEHEAD ! Millipede array listheads BYTE GUN_X,GUN_Y ! Gun location PARAMETER INIT_LIVES = 4, ! Initial number of lives for player 1 MAX_LIVES = 5, ! Maximum number of unused lives 1 BULL_SPEED = 1, ! Bullet speed per update cycle 1 MAX_BULLET = 3, ! Size of bullet array 2 B_XLOC = 1, ! Bullet X location item index 3 B_YLOC = 2 ! Bullet Y location item index BYTE BU_ARY(2,MAX_BULLET) ! Bullet array INTEGER*4 SCORE(2), ! Score 1 LIVES(2), ! Lives remaining 2 NEWLIFE(2) ! Bonus life score value INTEGER*2 UNDO_CODE ! Reason for exiting the main loop C Can take on the following values: PARAMETER U_BUGCHECK1 = 1, ! Bugcheck - MOVEMILLI 1 U_KILLMILLI = 2, ! Killed last active millipede segment 2 U_GUNKILLED = 3, ! Gun was killed by something 3 U_EXIT = 4, ! Player typed 'Q' 4 U_BUGCHECK2 = 5, ! Bugcheck - TARGAST 5 U_BUGCHECK3 = 6, ! Bugcheck - INITTARG and MOVETARG 6 U_BUGCHECK4 = 7, ! Bugcheck - HITCHECK 7 U_MAXSCORE = 8, ! Player reached maximum score 8 U_BUGCHECK5 = 9, ! Bugcheck - HITMILLI 9 MAX_UNDO = 9 ! Number of UNDO_CODEs defined C ! Number of bells to ring when: PARAMETER BELLCNT_SPID = 3, ! Spider appears 1 BELLCNT_DRAG = 1, ! Dragon appears 2 BELLCNT_BOMB = 2 ! Bomb appears C C Special targets general data C INTEGER*4 TARG_XLOC,TARG_YLOC, ! Target location 1 TARG_SCORE(3) ! Score for hitting target BYTE TARG_IDX, ! Index for current target [1,3] 1 TARG_CHAR(3),TARG_HITCHAR(3) ! Character and dead character LOGICAL*1 TARG_START,TARG_ACTIVE ! Control vrbls C C Spider specific data C BYTE SP_INC, ! 1 SP_DELX,SP_DELY, ! 2 SP_XDIR,SP_YDIR, ! Movement directions 3 SP_MAXY, ! Height of upward bounce 4 SP_WRAP ! Number of passes across screen C C Dragon specific data C BYTE DRAG_DIR ! X direction of movement LOGICAL*1 DRAG_MOVE ! Alternate update cycle move flip-flop LOGICAL*1 BELL_OK ! Player wants bells if .TRUE. INTEGER*4 BELL_COUNT ! Number of bells to ring COMMON / MILLI / TARG_XLOC,TARG_YLOC,SCORE,LIVES,NEWLIFE, 1 TARG_SCORE, 1 BELL_COUNT,MI_ARY,SE_ARY,MI_LISTHEAD, 1 MI_FREEHEAD,GUN_X,GUN_Y,BU_ARY,UNDO_CODE, 2 TARG_IDX,TARG_START,TARG_ACTIVE,TARG_HITCHAR, 3 TARG_CHAR,BELL_OK,DRAG_DIR,DRAG_MOVE, 4 SP_INC,SP_DELX,SP_DELY,SP_XDIR,SP_YDIR,SP_MAXY,SP_WRAP C C Increasing difficulty (and starting difficulties) data C There are 9 items which change as a function of difficulty level - C these are described below, for the variable that holds the current C value - each of these has a corresponding array which holds the values C for that item for the different difficulty levels - see INITDIFF and C INCRDIFF routines for more info - do an MCR SEARCH *.FOR DIF_ to see C which routines use these 9 items C PARAMETER DIF_MAXLEVEL = 11 ! Number of difficulty levels INTEGER*4 DIF_MAXBUL, ! Number of active bullets allowed 1 DIF_MAXSEG, ! Number of segments in a new millipede 2 DIF_RL_TIX, ! Lower random limit into target indices 3 DIF_RU_TIX, ! Upper 4 DIF_RL_TTM, ! Lower random limit for target release timer 5 DIF_RU_TTM, ! Upper 6 DIF_RL_BAR, ! Lower random limit for barrier hit count 7 DIF_RU_BAR, ! Upper 8 DIF_NULIFE ! Points-for-bonus-life threshold INTEGER*4 DIFV_MAXBUL(DIF_MAXLEVEL),DIFV_MAXSEG(DIF_MAXLEVEL), 1 DIFV_RL_TIX(DIF_MAXLEVEL),DIFV_RU_TIX(DIF_MAXLEVEL), 2 DIFV_RL_TTM(DIF_MAXLEVEL),DIFV_RU_TTM(DIF_MAXLEVEL), 3 DIFV_RL_BAR(DIF_MAXLEVEL),DIFV_RU_BAR(DIF_MAXLEVEL), 4 DIFV_SCORE(DIF_MAXLEVEL),DIFV_NULIFE(DIF_MAXLEVEL), 5 DIF_INIT, ! Initial difficulty level 6 DIF_LEVEL ! Current difficulty level COMMON / DIFICULTY / DIF_MAXBUL,DIF_MAXSEG,DIF_RL_TIX,DIF_RU_TIX, 1 DIF_RL_TTM,DIF_RU_TTM,DIF_RL_BAR,DIF_RU_BAR,DIF_NULIFE, 2 DIFV_MAXBUL,DIFV_MAXSEG,DIFV_RL_TIX,DIFV_RU_TIX, 3 DIFV_RL_TTM,DIFV_RU_TTM,DIFV_RL_BAR,DIFV_RU_BAR,DIFV_NULIFE, 4 DIFV_SCORE,DIF_INIT,DIF_LEVEL CHARACTER*15 PLAYER_NAME ! Player's name COMMON / CHARS / PLAYER_NAME