$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_VERIFY"))' $! $! This archive created by VMS_SHARE Version 7.2-007 22-FEB-1990 $! On 30-MAY-1992 03:25:43.15 By user MASLIB $! $! This VMS_SHARE Written by: $! Andy Harper, Kings College London UK $! $! Acknowledgements to: $! James Gray - Original VMS_SHARE $! Michael Bednarek - Original Concept and implementation $! $!+ THIS PACKAGE DISTRIBUTED IN 3 PARTS, TO KEEP EACH PART $! BELOW 30 BLOCKS $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. BUILD.COM;1 $! 2. DESTROYER.DIE;1 $! 3. DESTROYER.HLP;1 $! 4. DESTROYER.PAS;1 $! 5. DESTROYER.SCN;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if f$trnlnm("SHARE_LOG") then $ w = "!" $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto START $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $UNPACK: SUBROUTINE ! P1=filename, P2=checksum $ if f$search(P1) .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped." $ delete 'f'* $ exit $file_absent: $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'." $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped." $ delete 'f'* $ exit $dirok: $ w "-I-PROCESS, Processing file ''P1'." $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1' PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");b:= CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(b)); LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION( BEGINNING_OF(b));g:=0;LOOP EXITIF MARK(NONE)=END_OF(b);x:=ERASE_CHARACTER(1); IF g=0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x="V" THEN APPEND_LINE; MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;IF x="+" THEN g:=1; ERASE_LINE;ENDIF;ELSE IF x="-" THEN IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+")= 1 THEN g:=0;ENDIF;ENDIF;ERASE_LINE;ENDIF;ENDLOOP;t:="0123456789ABCDEF"; POSITION(BEGINNING_OF(b));LOOP r:=SEARCH("`",FORWARD);EXITIF r=0;POSITION(r); ERASE(r);x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,ERASE_CHARACTER(1))-1; COPY_TEXT(ASCII(16*x1+x2));ENDLOOP;WRITE_FILE(b,GET_INFO(COMMAND_LINE, "output_file"));ENDPROCEDURE;Unpacker;QUIT; $ delete/nolog 'f'* $ CHECKSUM 'P1' $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT $ e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ ENDSUBROUTINE $START: $ create 'f' X$ PASCAL DESTROYER X$ LINK DESTROYER, INTERACT/LIB X$ DELETE *.OBJ;*/NOCONFIRM X$ EXIT $ CALL UNPACK BUILD.COM;1 2115699838 $ create 'f' X`07`07 X`1B`5B1;1H`1B`5B2K`1B(0`1B`5B4;36H`1B`5B0m x `1B`5B5;43H `1B`5B9;42H `1 VB`5B11;38H `1B`5B15;36H `1B`5B19;36H `1B`5B20;42H `1B`5B23;38Hq X`1B`5B?5h`1B`5B2;36Hqqq`1B`5B8;44H `1B`5B9;36H q`1B`5B7m `1B`5B0mq `1B`5B?5l V`1B`5B10;36H `1B`5B13;41H `1B`5B16;44H `1B`5B23;44Hq X`1B`5B6;36H x `1B`5B7;39H `1B`5B9;43H `1B`5B11;42H `1B`5B17;39H `1B`5B1 V8;44H `1B`5B19;44H `1B`5B21;43H`20 X`1B`5B?5h`1B`5B12;39H `1B`5B13;39H `1B`5B14;39H `1B`5B15;39H `1B`5B16;39H `1 VB`5B?5l`1B`5B17;42H `1B`5B18;42H `1B`5B19;42H `1B`5B20;42H `1B`5B21;42H`20 X`1B`5B3;38H `1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B0m `1B`5B4;37H `1B`5B5;36H q V `20 X`1B`5B?5h`1B`5B12;36H `1B`5B15;36H `1B`5B16;36H `1B`5B17;36H q `1B`5B?5l V`1B`5B18;36H `1B`5B19;38H`20 X`1B`5B4;39H `1B`5B5;41H `1B`5B6;41H `1B`5B7;41H `1B`5B8;44H `1B`5B9;44H V `1B`5B10;42H `1B`5B11;38H `20 X`1B`5B?5h`1B`5B13;38H `1B`5B14;38H `1B`5B15;41H `1B`5B16;41H `1B`5B17;41H V `1B`5B?5l`1B`5B18;41H `1B`5B19;39H `1B`5B20;39H`20 X`1B`5B21;39H `1B`5B22;36H `1B`5B23;36Hq X`1B`5B4;44H `1B`5B5;44H `1B`5B6;44H `1B`5B8;38H `1B`5B9;38H `1B`5B10;38 VH `1B`5B12;40H `1B`5B13;42H `1B`5B14;42H`20 X`1B`5B?5h`1B`5B15;42H `1B`5B16;44H `1B`5B17;44H `1B`5B19;44H `1B`5B?5l`1B` V5B20;44H `1B`5B21;40H `20 X`1B`5B2;44Hq`1B`5B3;42H `1B`5B11;36H `1B`5B12;44H `1B`5B13;36H q `1 VB`5B7m `1B`5B0m q `1B`5B14;36H `20 X`1B`5B16;38H `1B`5B17;37H `1B`5B20;38H `1B`5B21;38H`20 X`1B`5B?5h`1B`5B3;37H `1B`5B6;39H `1B`5B7;37H `1B`5B7m `1B`5B0m `1B`5B?5l`1B` V5B8;36H `1B`5B9;40H `1B`5B10;40H `1B`5B13;40H `1B`5B17;40H`20 X`1B`5B18;40H `1B`5B20;36H `1B`5B22;40H `1B`5B23;42Hq X`1B`5B9;39H `1B`5B15;40H `1B`5B17;43H `1B`5B21;36H `1B`5B22;42H `20 X`1B`5B?5h`1B`5B2;40Hq`1B`5B3;36H `1B`5B5;42H `1B`5B6;38H `1B`5B16;40H `1 VB`5B?5l`1B`5B20;40H `1B`5B21;37H`20 X`1B`5B5;37H `1B`5B6;42H `1B`5B7;36H `1B`5B9;41H `1B`5B16;42H`20 X`1B`5B?5h`1B`5B2;42Hq`1B`5B3;41H `1B`5B7;38H `1B`5B19;37H `1B`5B23;40Hq`1B`5 VB?5l X`1B`5B9;37H `1B`5B12;43H `1B`5B13;37H `20 X`1B`5B14;43H `1B`5B16;43H `1B`5B19;43H`20 X`1B`5B?5h`1B`5B?5l`1B`5B?5h`1B`5B?5l`1B`5B2J`1B(B $ CALL UNPACK DESTROYER.DIE;1 487330749 $ create 'f' X`1B`5BH`1B`5BJ`1B(B`1B`5B0m X`1B`5B1;1H`1B#3`1B`5B7m * `1B`5B0m Welcome To The Destroyer League `1B`5B7m V * `1B`5B2;1H`1B#4 * `1B`5B0m Welcome To The Destroyer League `1B`5B7m *`20 X`1B`5B3;1H`1B#3`1B`5B0m `1B(0ooooooooooooooooooooooooooooooo `1B`5B4;1H`1 VB#6 P`1B(Bhaser Controls`1B`5B4;27HInstructions X`1B`5B5;1H`1B(0lqqqqqqqqqqwqqqqqqqqqqwqqqqqqqqqqk lqwqwqk lqqqqqqqqqqqqq Vqqqqqqqqqqqqqqqqqqk X`1B`5B6;1Hx `1B(B"7" `1B(0x `1B(B"8" `1B(0x `1B(B"9" `1B(0x V tq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B0mqu x`1B`5B6;80Hx X`1B`5B7;1Hx`1B`5B7;12Hx`1B`5B7;23Hx`1B`5B7;34Hx x x x x x S`1B(Bhoo Vt Down Incoming `1B(0x X`1B`5B8;1Hx L`1B(Beft `1B(0x R`1B(Bight `1B(0x R`1B(Bight `1B(0x V tq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B0mqu x`1B`5B8;80Hx X`1B`5B9;1Hx `1B`5B7m U`1B(Bp `1B`5B0m `1B(0x `1B`5B7m S`1B(Btop `1B`5B V0m `1B(0x `1B`5B7m U`1B(Bp `1B`5B0m `1B(0x x x x x x`1B`5B9;59H X`1B`5B9;59HA`1B(Bliens : '#'`1B`5B9;80H`1B(0x`1B`5B10;1Hx`1B`5B10;12Hx`1B`5B V10;23Hx`1B`5B10;34Hx tq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B0mqu x`1B`5B10;8 V0H X`1B`5B10;80Hx`1B`5B11;1Htqqqqqqqqqqnqqqqqqqqqqnqqqqqqqqqqu x x x x x V A`1B(Bpproaching From`1B`5B11;80H`1B(0x X`1B`5B12;1Hx `1B(B"4" `1B(0x `1B(B"5" `1B(0x `1B(B"6" `1B(0x V tq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B0mqu x`1B`5B12;80Hx X`1B`5B13;1Hx`1B`5B13;12Hx`1B`5B13;23Hx`1B`5B13;34Hx x x x x x`1B`5B13;58 VHL`1B(Beft And Right. `1B(0x X`1B`5B14;1Hx L`1B(Beft `1B(0x`1B`5B14;23Hx R`1B(Bight `1B(0x tq`1B` V5B7m `1B`5B0mq`1B`5B7m `1B`5B0mqu x`1B`5B14;80Hx X`1B`5B15;1Hx `1B`5B7m F`1B(Bire `1B`5B0m `1B(0x`1B`5B15;23Hx `1B`5B7m F`1 VB(Bire `1B`5B0m `1B(0x x x x x x `7E`7E`7E`1B`5B7m `1B(B`5BReturn`5D X`1B`5B15;65H to Play `1B`5B0m`1B(0`7E`7E`7E x`1B`5B16;1Hx`1B`5B16;12Hx`1B` V5B16;23Hx`1B`5B16;34Hx tq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B0mqu x`1B`5B16 V;80H X`1B`5B16;80Hx`1B`5B17;1Htqqqqqqqqqqnqqqqqqqqqqnqqqqqqqqqqu x x x x x V H`1B(Bitting Phaser Direction `1B(0x X`1B`5B18;1Hx `1B(B"1" `1B(0x `1B(B"2" `1B(0x `1B(B"3" `1B(0x V tq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B0mqu x`1B`5B18;80Hx X`1B`5B19;1Hx`1B`5B19;12Hx`1B`5B19;23Hx`1B`5B19;34Hx x x x x x R`1B V(Bepeatedly Will `1B(0x X`1B`5B20;1Hx L`1B(Beft `1B(0x L`1B(Beft `1B(0x R`1B(Bight `1B(0x V tq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B0mqu x`1B`5B20;80Hx X`1B`5B21;1Hx `1B`5B7m D`1B(Bown `1B`5B0m `1B(0x `1B`5B7m S`1B(Btop `1B`5 VB0m `1B(0x `1B`5B7m D`1B(Bown `1B`5B0m `1B(0x x x x x x I`1B(Bn X`1B`5B21;56Hcrease It's Speed . `1B(0x`1B`5B22;1Hx`1B`5B22;12Hx`1B`5B22; V23Hx`1B`5B22;34Hx tq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B0mqu x`1B`5B22;80H X`1B`5B22;80Hx`1B`5B23;1Hmqqqqqqqqqqvqqqqqqqqqqvqqqqqqqqqqj mqvqvqj mqqqq Vqqqqqqqqqqqqqqqqqqqqqqqqqqqj`1B`5B1;1H X`1B* X`1B`5B6;36H`1B(B<*`1B* X`1B`5B6;36HL `1B`5B7;36H<*`1B* X`1B`5B7;36He `1B`5B8;36H<*`1B* X`1B`5B8;36Hf `1B`5B9;36H<*`1B* X`1B`5B9;36Ht `1B`5B10;36H<*`1B* X`1B`5B10;36H `1B`5B11;36H<*`1B* X`1B`5B11;36HP `1B`5B12;36H<*`1B* X`1B`5B12;36Hh `1B`5B13;36H<*`1B* X`1B`5B13;36Ha `1B`5B14;36H<*`1B* X`1B`5B14;36Hs `1B`5B15;36H<*`1B* X`1B`5B15;36He `1B`5B16;36H<*`1B* X`1B`5B16;36Hr `1B`5B17;36H<*`1B* X`1B`5B17;36Hs `1B`5B18;36H<*`1B* X`1B`5B17;36H `1B* X`1B`5B18;36H `1B`5B19;36H<*`1B* X`1B`5B19;36H `1B`5B20;36H<*`1B* X`1B`5B20;36H `1B`5B21;36H<*`1B* X`1B`5B21;36H `1B`5B22;36H<*`1B* X`1B`5B1;1H X`1B`5B22;36H `1B`5B23;36H<*`1B`5B1;1H X`1B* X`1B`5B22;36H<*`1B`5B23;36H `1B`5B1;1H X`1B* X`1B`5B21;36H<*`1B`5B22;36H `1B* X`1B`5B1;1H X`1B`5B20;36H<*`1B`5B21;36H `1B* X`1B`5B19;36H<*`1B`5B20;36H `1B* X`1B`5B21;45H*>`1B* X`1B`5B20;45H*>`1B`5B21;45H r`1B* X`1B`5B19;45H*>`1B`5B20;45H e`1B* X`1B`5B18;45H*>`1B`5B19;45H s`1B* X`1B`5B17;45H*>`1B`5B18;45H a`1B* X`1B`5B16;45H*>`1B`5B17;45H h`1B* X`1B`5B15;45H*>`1B`5B16;45H P`1B* X`1B`5B14;45H*>`1B`5B15;45H `1B* X`1B`5B13;45H*>`1B`5B14;45H t`1B* X`1B`5B12;45H*>`1B`5B13;45H h`1B* X`1B`5B11;45H*>`1B`5B12;45H g`1B* X`1B`5B10;45H*>`1B`5B11;45H i`1B* X`1B`5B9;45H*>`1B`5B10;45H R`1B* X`1B`5B8;45H*>`1B`5B9;45H `1B* X`1B`5B7;45H*>`1B`5B8;45H `1B* X`1B`5B6;45H*>`1B`5B7;45H `1B* X`1B`5B5;45H*>`1B`5B6;45H `1B* X`1B`5B5;45H `1B`5B6;45H*>`1B* X`1B`5B6;45H `1B`5B7;45H*>`1B* X`1B`5B7;45H `1B`5B8;45H*>`1B* $ CALL UNPACK DESTROYER.HLP;1 487345365 $ create 'f' X`7B************************************************************************* V*** X X X D E S T R O Y E R S U P E R L E A G U E . X ----------------------------------------------- X X Written By : Paul Seo Shuen Hwa. 20 May 1981 X University of Waikato. X Modified By : Paul Denize. 11 Oct 1988 X Royal New Zealand Navy X X X *************************************************************************** V*`7D X X`5B Inherit ('INTERACT') `5D X XPROGRAM Destroyer; X XTYPE X maxrow = 0..24; X maxcolumn = 0..81; X movelist = (up, speedup, thrustup, down, speeddown, thrustdown, stop); X courselist = (highest, high, low, lowest, missed); X X misseltype = Record X strikingcourse : courselist; X course : maxrow; X column : maxcolumn; X tag : boolean X End; X X guntype = Record X move : movelist; X row : maxrow X End; X X alientype = Record X column : maxcolumn; X tag : boolean `7Bstill alive`7D X End; X XVAR X missel1, missel2 : misseltype; X gun1, gun2 : guntype; X aliennumber : 0..6; X alien : array `5B1..8`5D of alientype; X ch : char; X score : integer; X lives : integer; X energy : integer; X first : boolean; X quit : boolean; X X XPROCEDURE show_screen; XVAR X i : maxcolumn; XBEGIN X clear; X posn (1,1); X qio_write ('Lasers<* <* <* Score : '+dec(Score,,5)+' Energy V : '+dec(Energy,,4)+' Lasers*> *> *>'); X show_graphedt('Destroyer.Scn',wait:=false); XEND; X XPROCEDURE alien_fire; X X PROCEDURE firealienmissel; X VAR X r : integer; X BEGIN X r := random(8); X IF not alien`5Br`5D.tag then X BEGIN X alien`5Br`5D.tag := true; X IF r <= 4 then X alien`5Br`5D.column := 2 X ELSE X alien`5Br`5D.column := 77; X aliennumber := aliennumber + 1; X END; X END; X XBEGIN X IF (aliennumber < 2) or X ((score > 200) and (aliennumber < 3)) or X ((score > 2000) and (aliennumber < 4)) or X ((score > 7000) and (aliennumber < 5)) or X ((score > 10000) and (aliennumber < 6)) then X firealienmissel; XEND; X XPROCEDURE missel1strike(row : maxrow; column, aliencolumn : maxcolumn); XBEGIN X IF (column - aliencolumn) > 1 then X BEGIN X posn (aliencolumn,row); X QIO_write (VT100_graphics_on+pad('','q',(column - aliencolumn))+VT100_ Vgraphics_off); X END; X posn (aliencolumn,row); X QIO_write ('*'+VT100_bs); X QIO_write (pad('',' ',max(0,(column - aliencolumn + 1)))+'<*'); X aliennumber := aliennumber - 1; X score := score + 32 + 33 - aliencolumn; X posn (31,1); X qio_write (dec(score,,5)) XEND; X XPROCEDURE missel2strike(row : maxrow; column, aliencolumn : maxcolumn); XBEGIN X IF (aliencolumn - column) > 1 then X BEGIN X posn (column,row); X QIO_write (VT100_graphics_on+pad('','q',(aliencolumn - column))+VT100_ Vgraphics_off) X END; X posn (aliencolumn,row); X QIO_write ('*'); X posn (45,row); X QIO_write (pad('*>',' ',max(0,(aliencolumn - column + 3)))); X aliennumber := aliennumber - 1; X score := score + 32 - 47 + aliencolumn; X posn (31,1); X qio_write (dec(score,,5)) XEND; X XPROCEDURE missel1missed(row : maxrow; column : maxcolumn); XBEGIN X posn (3,row); X QIO_write (VT100_graphics_on+'qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'+VT100_gra Vphics_off); X posn (3,row); X QIO_write (' <*'); X energy := energy - 10; X posn (54,1); X qio_write (dec(Energy,,4)) XEND; X XPROCEDURE missel2missed(row : maxrow; column : maxcolumn); XBEGIN X posn (column,row); X QIO_write (VT100_graphics_on+'qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'+VT100_graph Vics_off); X posn (45,row); X QIO_write ('*> '); X energy := energy - 10; X posn (54,1); X qio_write (dec(Energy,,4)) XEND; X XPROCEDURE move_missel1; XBEGIN X missel1.tag := false; X CASE missel1.strikingcourse of X highest : IF alien`5B1`5D.tag then X BEGIN X missel1strike(5, missel1.column, alien`5B1`5D.column); X alien`5B1`5D.tag := false; X END X ELSE X missel1missed(5, missel1.column); X high : IF alien`5B2`5D.tag then X BEGIN X missel1strike(10, missel1.column, alien`5B2`5D.column); X alien`5B2`5D.tag := false; X END X ELSE X missel1missed(10, missel1.column); X low : IF alien`5B3`5D.tag then X BEGIN +-+-+-+-+-+-+-+- END OF PART 1 +-+-+-+-+-+-+-+-