10 GOSUB 610
20 paper 3:CLS
30 LET BG=2:LET FG=1:LET T=0:LET L=3:LET LW=W-3:GOSUB 280
40 paper 2:ink 0
50 PRINT tab(1,1);"LEVEL GENERATOR"; ' There are lots of print and
                                    ' colour commands at the start of
                                    ' this listing, so use the
                                    ' general conversion charts
                                    ' opposite with great care.
60 PRINT tab(1,2);"THIS IS LEVEL:";LE;
70 PRINT tab(1,3);"PRESS H FOR HELP"
80 LET BG=3:LET FG=2:LET T=5:LET L=15:LET LW=15:GOSUB 280
90 LET X=1:LET Y=1
100 LET I$=inkey$
110 IF I$="H" THEN GOSUB 360
120 IF I$="A" AND Y>1 THEN LET Y=Y-1
130 IF I$="Z" AND Y<15 THEN LET Y=Y+1
140 IF I$="N" AND X>1 THEN LET Y=X-1
150 IF I$="M" AND X>15 THEN LET Y=X+1
160 IF I$="/" AND I$<":" THEN GOSUB 230
170 paper 3:ink 0
180 PRINT tab(X,Y+5);CHR$(OS);
190 PRINT tab(X,Y+5);CHR$(R(X,Y));
200 IF I$="S" AND IX>0 THEN GOSUB 450:GOTO 20
210 IF I$<>"F" THEN GOTO 100
220 STOP
230 LET I=VAL(I$)
240 IF I=9 THEN LET I=8+rnd(3)
250 IF I=5 THEN LET IX=X:LET IY=Y
260 LET R(X,Y)=CO+I
270 RETURN
280 PRINT tab(O,T);
290 paper FG:PRINT LEFT$(B$,LW+2)
300 paper BG:ink FG
310 FOR I=1 TO L
320     PRINT TAB(0);CHR$(OS);LEFT$(B$,LW);CHR$(OS)
330 NEXT I
340 paper FG:PRINT LEFT$(B$,LW+2);
350 RETURN
360 paper 1:ink 3
370 FOR H=1 TO 10
380     PRINT tab(1,4);H$(H);:GOSUB 430
390     PRINT tab(1,4);LEFT$(B$,W-2);
400 NEXT H
410 ink 3
420 RETURN
430 LET G$=inkey$:IF G$="" THEN GOTO 430
440 RETURN
450 PRINT tab(1,4);"ONE MOMENT PLEASE.";
460 LET S$=""
470 FOR J=1 TO 15
480     FOR K=1 TO 15
490         LET S$=S$+CHR$(R(K,J))
500     NEXT K
510 NEXT J
520 LET S$=S$+CHR$(IX+OS):LET S$=S$+CHR$(IY+OS)
530 LET S$=S$+CHR$(LE+OS)
540 PRINT tab(1,4);"ANY KEY TO SAVE  ";:GOSUB 430
550 LET S=OPENOUT "LEVEL"
560 PRINT#S,S$
570 CLOSE#S
580 PRINT tab(1,4);LEFT$(B$,W)
590 LET LE=LE+1:GOSUB 700
600 RETURN
610 DIM R(15,15),H$(10) ' Initialisation starts at line 610.
620 GOSUB 790
630 DATA "PRESS ANY KEY","TO MOVE A Z N M","1 WALL   2 VASE"
640 DATA "3 CHEST 4 * IDOL *","5 WAY IN  6 EXIT","7 TRAP","8 SAFE PLACE"
650 DATA "9 GUARD","0 TO ERASE","S TO SAVE" ' These are the Help
                                           ' routine lines. They
                                           ' remind you which number
                                           ' keys to press.
660 LET LE=1
670 FOR I=1 to 10
680     READ H$(I)
690 NEXT I:GOSUB 810
700 FOR J=1 TO 15
710     FOR K=1 TO 15
720         LET R(J,K)=CO
730     NEXT K
740 NEXT J
750 LET IX=0:LET IY=0
760 LET B$="":FOR I=1 TO W:LET B$=B$+" ":NEXT I
770 RETURN
790 REM SET UP THE CHAR START
800 RETURN
810 REM READ THE CHARACTERS
820
830
840
850
860
1000 DATA 255,255,255,255,255,255,255,255 ' Here is the data for the
                                         ' user-defined graphics. You
                                         ' will find the same data at
                                         ' the end of the game module
                                         ' listing.

    REM ********
    REM ********
    REM ********
    REM ********
    REM ********
    REM ********
    REM ********
    REM ********

1010 DATA   0,  0,  0,  0,  0,  0,  0,  0
1020 DATA  85,170, 85,170, 85,170, 85,170
1030 DATA   0, 60, 24, 60,126,126,126, 60

    REM
    REM   ****
    REM    **
    REM   ****
    REM  ******
    REM  ******
    REM  ******
    REM   ****

1040 DATA   0, 56,100,114, 95, 73, 41, 31
1050 DATA  20, 42, 20, 20, 93, 93, 62, 99
1060 DATA  60,126,255,255,255,255,255,255
1070 DATA  60,102,195,129,129,129,133,129
1080 DATA 129, 66, 36,  0,  0, 36, 66,129
1090 DATA   0, 60, 66, 66, 66, 66, 60,  0
1100 DATA  76,158,170,190, 84, 30, 37, 88
1110 DATA   0, 56, 84,124, 56, 44, 68,102
1120 DATA   0,  8, 28, 42,127, 85, 65, 34

    REM GENERAL CONVERSIONS
    REM
    REM COMMAND tab(X,Y);
    REM BBC/ELECTRON TAB(X,Y);
    REM SPECTRUM AT Y,X
    REM C64/VIC HM$;LEFT$(CU$,Y);SPC(X);
    REM
    REM COMMAND X$=inkey$
    REM BBC/ELECTRON X$=INKEY$(0)
    REM SPECTRUM X$=INKEY$
    REM C64/VIC GET X$
    REM
    REM COMMAND paper X
    REM BBC/ELECTRON COLOUR X+128
    REM SPECTRUM PAPER C(X+1)
    REM C64/VIC PRINT BG$(X);
    REM
    REM COMMAND ink X
    REM BBC/ELECTRON COLOUR X
    REM SPECTRUM INK C(X+1)
    REM C64/VIC
    REM
    REM COMMAND rnd(X)
    REM BBC/ELECTRON RND(X)
    REM SPECTRUM INT(RND*X+1)
    REM C64/VIC INT(RND(1)*X+1)

    REM BBC/ELECTRON
790  OS=224:CO=OS+6:W=20
795  MODE 5:VDU 23,0,8202;0;0;0;
820  VDU 23,224:FOR I=0 TO 7:READ A:VDU A:NEXT I
830 FOR I=0 TO 11:VDU 23,230+I
840     FOR J=0 TO 7:READ A:VDU A:NEXT J
850 NEXT I:RETURN


   REM COMMODORE 64/VIC
   REM VIC EVERY INIT

   POKE 44,28:POKE 642,28:SYS(64824)

   REM BOTH C64/VIC

320 PRINT BG$(FG);" ";BG$(BG);LEFT$(B$,LW);BG$(FG);" "
410 REM LEAVE OUT THIS LINE
550 OPEN 1,1,1,"LEVEL"
555 FOR I=0 TO 2
560     PRINT#1,MID$(S$,I*76+1,76)
565 NEXT I
570 CLOSE 1

4000 BG$(0)=CHR$(146):BG$(1)=CHR$(18)+CHR$(28)
4010 BG$(2)=CHR$(18)+CHR$(158):BG$(3)=CHR$(18)+CHR$(5)
4020 HM$=CHR$(19):CU$="":FOR I=1 TO W:LET CU$=CU$+CHR$(17):NEXT I
4030 POKE 650,255:RETURN

   REM C64 ONLY

5   GOSUB 5000
20  PRINT CHR$(147):POKE 53280,0:POKE 53281,0
790 OS=96:CO=OS+6:W=40:GOSUB 4000
820 FOR I=0 TO 7:READ A:POKE 36352+I,255-A:NEXT I
830 FOR I=0 TO 95:READ A:POKE 36400+I,255-A:NEXT I
840 RETURN

   REM VIC ONLY

20  PRINT CHR$(147):POKE 36879,8
790 OS=96,CO=OS+6:W=22:GOSUB 4000
820 FOR I=0 TO 2047:POKE 5120+I,PEEK(32768+I):NEXT I
830 FOR I=0 TO 7:READ A:POKE 6656+I,255-A:NEXT I
840 FOR I=0 TO 95:READ A:POKE 6704+I,255-A:NEXT I
850 POKE 36869,205
860 RETURN

   REM SPECTRUM

   REM LINES 290,320,390,580
   REM REPLACE EVERY LEFT$(B$,Exp) WITH
   REM B$(TO Exp)

550 LEAVE OUT THIS LINE
560 LET Q$(1)=S$
570 SAVE "LEVEL" DATA @$()
610 DIM R(15,15):DIM H$(10,18)
615 DIM Q$(1,229)
790 LET W=32:LET OS=144:LET CO+6
820 FOR I=0 TO 7:READ A:POKE USR"A"+1,A;NEXT I
830 FOR I=0 TO 95:READ A:POKE USR "G"+I,A:NEXT I
840 DIM C(4)
850 LET C(1)=0:LET C(2)=2:LET C(3)=6:LET C(4)=7
860 RETURN