$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_VERIFY"))' $! $! This archive created by VMS_SHARE Version 7.2-007 22-FEB-1990 $! On 15-SEP-1993 17:28:06.48 By user MASMUMMY $! $! 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 5 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. BD.CAVES;1 $! 2. BD.COM;1 $! 3. BD.HELP;1 $! 4. BD.PAS;1 $! 5. BD.POINTER;1 $! 6. BD.TXT;1 $! 7. BD200.FONT;1 $! 8. BD300.FONT;1 $! 9. BOULDER.DASH;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' X21 X40 22 3 2 12 10 15 150 0 8492 0 XCAVE A XB# 1 1 38 20 XR% 1 1 38 20 160 XR 1 1 38 20 50 XR' 1 1 38 20 18 XB9 1 7 30 1 XB9 9 14 30 1 XS! 38 16 XX! X40 22 18 19 10 20 50 180 0 3912 0 XCAVE B XB# 1 1 38 20 XR% 1 1 38 20 150 XR 1 1 38 20 40 XR' 1 1 38 20 19 XB9 8 1 1 20 XB9 16 1 1 20 XB9 24 1 1 20 XB9 32 1 1 20 XB9 1 6 38 1 XB9 1 13 38 1 XB 20 1 1 20 XB 1 3 38 1 XB 1 9 38 1 XB 1 16 38 1 XS- 1 17 XS! 18 20 XX! X40 22 3 2 24 15 0 320 0 3910 0 XCAVE C XB# 1 1 38 20 XR9 1 1 38 20 200 XR% 1 1 38 20 200 XR' 1 1 39 20 26 XS! 39 18 XX! X40 22 1 1 36 5 20 150 0 4412 0 XCAVE D XB# 1 1 38 20 XR% 1 1 38 20 40 XB 9 9 2 2 XB 17 9 2 2 XB 25 9 2 2 XB 33 9 2 2 XL) 9 9 8 0 4 XS! 38 20 XX! X19 11 3 3 6 30 0 255 1 0 0 XBONUS XB 1 1 17 9 XS% 9 2 XS# 9 3 XS+ 6 9 XS! 17 9 XX! X40 22 1 1 4 50 90 190 0 0 0 XCAVE E XB# 1 1 38 20 XB 8 8 3 3 XB 16 8 3 3 XB 24 8 3 3 XB 32 8 3 3 XB 8 14 3 3 XB 16 14 3 3 XB 24 14 3 3 XB 32 14 3 3 XL- 10 9 8 0 4 XL- 10 15 8 0 4 XL' 9 10 8 0 4 XL' 9 16 8 0 4 XS! 39 20 XX! X40 22 3 18 4 40 60 180 0 2249 0 XCAVE F XB# 1 1 38 20 XR% 1 1 38 20 200 XB9 1 1 9 13 XB9 30 1 9 13 XB 2 2 8 2 XB 2 5 8 2 XB 2 8 8 2 XB 2 11 8 2 XB 30 2 8 2 XB 30 5 8 2 XB 30 8 8 2 XB 30 11 8 2 XL' 3 3 0 3 4 XL' 36 3 0 3 4 XL- 4 3 0 3 4 XL- 35 3 0 3 4 XS! 38 18 XX! X40 22 20 1 15 10 20 200 0 7705 77 XCAVE G XB# 1 1 38 20 XR% 1 1 38 20 200 XR 1 1 38 20 150 XR' 1 1 38 20 10 XR- 1 1 38 20 10 XB9 1 5 12 1 XB9 28 3 11 1 XS$ 20 19 XS! 39 5 XX! X40 22 20 1 10 10 20 200 0 4312 101 XCAVE H XB# 1 1 38 20 XR% 1 1 38 20 200 XR 1 1 38 20 150 XR' 1 1 38 20 7 XR- 1 1 38 20 7 XB9 1 5 12 1 XB9 28 3 11 1 XB9 1 13 12 1 XB9 28 11 11 1 XB; 14 15 8 1 XS! 0 3 XX! X19 11 1 2 15 10 0 255 1 0 0 XBONUS XB# 1 1 17 9 XL- 2 1 1 1 7 XL% 1 1 1 1 8 XL' 2 3 1 1 7 XL% 1 4 1 1 6 XL% 9 8 1 -1 9 XL' 9 9 1 -1 8 XL% 11 9 1 -1 7 XS! 17 1 XX! X40 22 7 10 75 5 10 200 0 1440 0 XCAVE I XB% 1 1 38 20 XR' 1 1 38 20 500 XR# 1 1 38 20 50 XF9 5 8 13 13 XF9 25 8 13 13 XB 6 9 11 11 XB 26 9 11 11 XB9 17 16 9 1 XB 17 17 9 1 XS# 12 8 XS# 31 8 XS! 8 10 XX! X40 22 13 1 12 25 60 240 0 0 0 XCAVE J XB# 1 1 38 20 XF9 1 2 21 17 XB9 3 4 3 14 XL' 6 3 2 2 8 XL' 6 17 2 -2 8 XB 6 9 15 3 XB- 6 10 15 1 XF9 7 4 13 13 XF9 9 6 9 9 XF9 11 8 5 5 XB- 4 5 1 9 XB' 4 14 1 4 XL 13 2 0 2 4 XS 4 4 XS! 39 20 XX! X40 22 20 18 6 50 100 280 0 2434 0 XCAVE K XB# 1 1 38 20 XR% 1 1 38 20 200 XR 1 1 38 20 80 XR- 1 1 38 20 9 XR' 1 1 38 20 3 XB9 10 1 1 8 XB9 20 1 1 8 XB9 30 1 1 8 XB9 5 9 9 1 XB9 15 9 9 1 XB9 25 9 9 1 XB9 9 12 1 9 XB9 12 13 17 1 XL9 28 17 1 -1 8 XL' 4 1 10 0 4 XS! 38 15 XX! X40 22 3 13 15 20 35 240 0 2427 0 XCAVE L XB# 1 1 38 20 XR% 1 1 38 20 175 XR' 1 1 38 20 23 XR 1 1 38 20 40 XB9 2 16 11 1 XB9 2 12 15 1 XB9 10 3 1 18 XB9 14 3 1 18 XB9 18 3 1 18 XB9 22 3 1 18 XB9 2 8 11 1 XB9 2 4 11 1 XB 31 3 2 2 XB 31 8 2 2 XB 31 13 2 2 XF# 30 2 4 4 XF# 30 7 4 4 XF# 30 12 4 4 XL- 31 3 0 5 3 XS! 11 21 XX! X19 11 9 2 5 10 20 255 1 0 0 XBONUS XB 1 1 17 9 XB' 1 9 13 1 XB- 14 6 4 4 XS! 17 4 XX! X40 22 20 1 50 5 8 240 0 2410 123 XCAVE M XB# 1 1 38 20 XR% 1 1 38 20 200 XB9 5 16 30 1 XB) 5 17 30 1 XB% 5 18 30 1 XB# 4 19 32 2 XS$ 22 1 XS! 12 1 XX! X40 22 4 1 30 10 20 200 0 0 0 XCAVE N XB# 1 1 38 20 XL- 23 5 2 0 6 XL% 23 6 2 0 6 XB 20 9 1 11 XB 18 9 1 11 XB 16 9 1 11 XB 14 9 1 11 XB 12 9 1 11 XB 10 9 1 11 XL, 10 9 2 2 6 XS! 39 18 XX! X40 22 20 1 15 10 20 200 0 9 96 XCAVE O XB# 1 1 38 20 XR% 1 1 38 20 200 XR 1 1 38 20 60 XR- 1 1 38 20 8 XL9 2 2 1 1 10 XL9 15 11 1 -1 10 XB# 12 11 3 2 XB; 12 13 3 1 XS! 20 20 XX! X40 22 1 1 12 10 20 220 0 555 103 XCAVE P XB# 1 1 38 20 XR% 1 1 38 20 150 XF9 7 8 6 8 XF9 15 8 6 8 XB; 7 8 6 1 XB; 15 8 6 1 XF# 8 17 4 4 XF# 16 17 4 4 XF# 24 17 4 4 XF# 32 17 4 4 XB 9 18 2 2 XB 17 18 2 2 XB 25 18 2 2 XB 33 18 2 2 XL- 10 18 8 0 4 XS! 39 2 XX! X19 12 3 1 6 30 0 255 1 0 16 XBONUS XB# 1 1 17 10 XB% 10 1 3 2 XB; 10 4 3 1 XB 10 5 3 3 XB; 10 8 3 1 XB 10 9 3 2 XL% 7 5 1 1 3 XS! 8 8 XX! X40 22 20 1 23 17 42 220 0 555 103 XCAVE Q XB# 1 1 38 20 XR% 1 1 38 20 180 XB# 1 9 38 1 XB 1 10 38 7 XB# 1 17 38 4 XB9 32 1 1 20 XB9 7 1 1 20 XL- 9 16 5 0 4 XL* 1 10 0 3 3 XL+ 38 10 0 3 3 XS! 20 20 XX! $ CALL UNPACK BD.CAVES;1 2104154584 $ create 'f' X$ write sys$output "Terminal/Port auf 19200 Baud stellen!" X$ write sys$output "You *MUST* be on a VT200 or higher to run this well" X$ wait 00:00:01 X$flag: X$ read/prompt="Are you on a VT`1B`5B1m`1B`5B7m2`1B`5B0m00 or VT`1B`5B1m`1B` V5B7m3`1B`5B0m00? "/end=flag sys$command terminal_type X$ tt = f$extract (0,1,terminal_type) X$ if tt .nes. "2" .and. tt .nes. "3" X$ then X$ write sys$output "please type `1B`5B1m`1B`5B4m2`1B`5B0m or `1B`5B1m`1B`5 VB4m3`1B`5B0m to answer, when in doubt type 2" X$ write sys$output "`1B`5BA`1B`5BA`1B`5BA X$ goto flag X$ endif X$ if tt .eqs. "2" then set term/dev=vt200/speed=19200 X$ if tt .eqs. "3" then set term/dev=vt300/speed=19200 X$ define/nolog b$dash_in mas$games:`5Bboulderdash`5Dbd.pointer X$ define/nolog b$dash mas$games:`5Bboulderdash`5D X$ bd = "$mas$games:`5Bboulderdash`5Dbd" X$ define/user sys$input sys$command X$ bd 'p1 'p2 'p3 'p4 'p5 'p6 'p7 'p8 X$ exit $ CALL UNPACK BD.COM;1 1663832885 $ create 'f' X1 BOULDERDASH XA well written version of the popular game "Boulderdash". Not sure what Xthe goal is so there is no external help :-). If you can translate the XGerman text, please send e-mail to user MASTER@UBVMS X XRead "Hardware Requirements"!!! X X2 PossibleHelp X+-------------------------------------------------------+ X`7C`09`09`09`09`09`09`09`7C X`7C`09`09 BOULDER DASH`09`09`09`7C X`7C`09`09`09`09`09`09`09`7C X+-------------------------------------------------------+ X X(w) 1988 Oskar Schirmer X XEs handelt sich hierbei um den versuch, ein echtzeitspiel Xauf einem grossrechner unterzubringen (...). X X0. wichtig: nach dem starten titelseite lesen ! X X1. boulder dash (als spiel): Xes geht darum, ein maenneken durch eine hoehle zu steuern, Xdiamanten zu finden, zu sammeln und schliesslich den ausgang Xzu benutzen. fuer gesammelte diamanten gibz punkte (DIAM:), Xdie zahl der benoetigten diamanten steht unter NEED:. Xfuer die ganze aktion steht die unter LEFT: gezaehlte zeit Xzur verfuegung. im uebrigen sind die level mehr oder weniger Xvom original auf dem apple uebernommen und sie sind alle Xmachbar !!! viel spass. X X2 HardwareRequirements Xan hardware wird benoetigt: X Xeine hinreichend eilige vax mit allem drum&dran (was das genau ist, Xsagt ihnen bestimmt gerne die auskunft). Xzum beispiel ein vt220-terminal, das in der lage ist, sixel-grafic Xanzuzeigen und zwar sollte das die daten mit einer rate von einigen Xkbaud, will heissen etwa 9600 oder 19200 baud. alles andere hat mit Xechtzeit nix mehr zu tun. X XYou *MUST* be on a VT200 or greater series terminal to play this. $ CALL UNPACK BD.HELP;1 2018800252 $ create 'f' X`7B`5E86$2ytDhhb23hg$67fg3765GHU&y `7D X`5BINHERIT('SYS$LIBRARY:STARLET')`5D XPROGRAM SPIELCHEN (INPUT,OUTPUT); X`20 X(******************************) X(* BOULDER DASH *) X(* WRITTEN 1988 BY *) X(* OSKAR SCHIRMER *) X(******************************) X`20 XCONST GAME_SIZE = 127; X MAGMA_COOL = 50; X SECOND = 10000000; X MOMENT = 2400000; X OUTBUFLEN = 256; X`20 X CSI = CHR(27)+'`5B'; X CRLF = CHR (13)+CHR (10); X XXERR01 = CHR(7)+CHR(27)+'`5B2J'+CHR(27)+'`5B?25h'+CHR(27)+'`5B?8h'; X XXABD10 = CHR(15)+CHR(27)+'`5B?5l'; X XXMNU01 = CHR(27)+'#6'+CHR(27)+'#'; X XXAA901 = CHR(27)+'`5B1;'; X XXABD06 = CHR(27)+'`5B1;1H'+CHR (13)+CHR (10); X XXABD08 = XXABD06; X XXPAG01 = CHR(27)+'`5B1;1H'+CHR(27)+'`5B2J'; X XXPRP01 = CHR(27)+'`5B1;1H'+CHR(27)+'`5B2J'+CHR(27)+'`5B?8l'+CHR(27)+' V`5B?25l'+CHR(27)+'`5B?7l' X +CHR(27)+'`5B1;1H'+CHR (27)+'#5'+CHR(10); X XXABD13 = CHR(27)+'`5B1;1HGOT:'; X XXABD01 = CHR(27)+'`5B2;'; X XXAA902 = XXABD01; X XXABD04 = XXABD01; X XXABD09 = CHR(27)+'`5B2@'+CHR(13)+CHR(10); X XXPLY01 = CHR(27)+'`5B2J'+CHR(27)+'`5B?25h'+CHR(27)+'`5B?8h'; X XXABD07 = CHR(27)+'`5B2P'+CHR (13)+CHR (10); X XXERR02 = CHR(27)+'`5B7m**** ERROR: '; X XXINC01 = CHR(27)+'`5B?5h'; X XXEIN01 = XXINC01; X XXMNU03 = CHR(27)+'`5BK'; X XXABD11 = ' '+CHR(27)+'`5B7mPAUSE'+CHR(27)+'`5B0m '; X XXABD12 = ' ***'+CHR(27)+'`5BK'; X XXERR03 = ' ****'+CHR(27)+'`5B0m'+CHR(7); X XXPRP03 = ';1H'+CHR(27)+'#6'+CHR(27)+'#3'+CHR(10)+CHR(27)+'#6'+CHR(27) V+'#4'; X XXABD03 = ';1H'+CHR(27)+'D'+CHR(27)+'#6'+CHR(27)+'#3'+CHR(27)+'D'+CHR( V27) X +'#6'+CHR(27)+'#4'+CHR(27)+'`5B1;'; X XXMNU02 = '`5D'+CHR (13)+CHR (10); X XXABD02 = 'r'+CHR(27)+'`5B'; X XXABD05 = 'r'+CHR(27)+'`5B2;1H'+CHR(27)+'M'+CHR(27)+'#6'+CHR(27)+'#4'+ VCHR(27)+'M' X +CHR(27)+'#6'+CHR(27)+'#3'+CHR(27)+'`5B1;'; X`20 X`20 XTYPE GAME_INDX = 0..GAME_SIZE; X STRING = VARYING `5B255`5D OF CHAR; X THING = (NOTHING,WAYOUT,BORDER,EARTH,MAGMA, `7B !"#$`7D X LYINGSTONE,ROLLINGSTONE,LYINGDIAMONT,ROLLINGDIAMONT, `7B%&'(`7 VD X BUTTERFLY0,BUTTERFLY1,BUTTERFLY2,BUTTERFLY3, `7B)*+,`7D X SQUAREFLY0,SQUAREFLY1,SQUAREFLY2,SQUAREFLY3, `7B-./0`7D X SMASH0,SMASH1,SMASH2,SMASH3, `7B1234`7D X CRASH0,CRASH1,CRASH2,CRASH3, `7B5678`7D X NORMALWALL,LIVINGWALL,SLEEPINGWALL, `7B9:;`7D X HAMSTER, `7B<`7D X THING_HIGH); X GAME_STATUS = (L_COMIN,L_ALIVE,L_DEAD,L_COUNT,L_COMOUT,L_ENDLVL); X GAME_AREA = ARRAY `5BGAME_INDX,GAME_INDX`5D OF THING; X T_CAVE_NAMES = `5E R_CAVE_NAMES; X R_CAVE_NAMES = RECORD NEXT : T_CAVE_NAMES; NAME : STRING; END; X $SQUAD = `5BQUAD,UNSAFE`5D RECORD LO,HI:INTEGER; END; X`20 XVAR AREA,OLDY:GAME_AREA; X PREDCYC4:ARRAY `5B0..3`5D OF 0..3; X L_STAT:GAME_STATUS; X CAVE_NAMES:T_CAVE_NAMES; X COMMAND,TASTE_LINX,TASTE_REXZ,TASTE_OBEN,TASTE_UNTN, X SCHAU_LINX,SCHAU_REXZ,SCHAU_OBEN,SCHAU_UNTN,MAINC,IS_FLASH:CHAR; X OK,GO,PAUSE,WINNY,MAGMA_CLOSED,MAGMA_SURROUNDED:BOOLEAN; X CAVE_ID,LINE,NEXTCAVE,FIRSTCAVE,GAMEFONT200,GAMEFONT300,CAVEROOT:STRING; X PICTURE:ARRAY `5B0..3,THING`5D OF 0..255; X FLASHPICT:ARRAY `5BTHING`5D OF CHAR; X SIZ_X,SIZ_Y,CYCLE4,QOS_A,QOS_B,POS_A,POS_B,HAM_A,HAM_B,HAMPA,HAMPB, X NUMP,SCORE,NEED_DIAM,HAVE_DIAM,VAL0_DIAM,VAL1_DIAM,LEFT_TIME,DOPLAY, X LW_ACTIVE,SCRPA,SCRPB,BONUS_HAM,HEIGHT,WIDTH,STATUS_C,MAXCAVE, X MAGMA_GROW,NOKEYDONE:INTEGER; X INPCH:PACKED ARRAY `5B1..1`5D OF CHAR; X CHIN,CHOUT:`5BWORD`5D 0..65535; X TIMER:$SQUAD; X OUTINX:INTEGER; X OUTBUF:PACKED ARRAY `5B1..OUTBUFLEN`5D OF CHAR; X RANDOM_SEED:UNSIGNED; X TO_BE_GIVEN_OUT:PACKED ARRAY `5B0..GAME_SIZE`5D OF BOOLEAN; X WIZARD:BOOLEAN; X DOIT,DOITTOO:BOOLEAN:=FALSE; X DATF:TEXT; X`20 X(************************* RANDOM *************************) X`20 XPROCEDURE RANDOMIZE; XTYPE QUADWORD = ARRAY `5BBOOLEAN`5D OF UNSIGNED; XVAR TEMP:QUADWORD; XBEGIN X$GETTIM (TEMP); XRANDOM_SEED := TEMP `5BFALSE`5D; XEND; X`20 XFUNCTION RANDOM (N:INTEGER) : INTEGER; XVAR RDUMMY:REAL; X`20 X FUNCTION MTH$RANDOM (VAR SEED:UNSIGNED) : REAL; X EXTERN; +-+-+-+-+-+-+-+- END OF PART 1 +-+-+-+-+-+-+-+-