User Tools

Site Tools


en:burglar_bill

BURGLAR BILL

Info

Author John Filsak
Computer Amstrad PCW 8256 / 8512 / 9512
Year ????
Gender Arcade
Controls Keyboard
Languages English
Status Preserved

Screenshots

Description

Burglar Bill is an entertaining game where our character will be Bill, a thief whose mission will be to break into the Bank's offices.

Bill must steal the contents of the safe, although he will not always find something in it. We will need all our ingenuity to carry out our mission. You have to be careful in the missions or we will end up in the hands of the police.

Our first mission will be to enter through the door of the Bank, although we will find ourselves with a problem. In order to open it, we will need to discover its key, which we will have to discover its combination of five possibilities. The combination will be a sequence of three numbers between the numbers 1 to 5, although these can be repeated. The good thing is that we will have some clue to know if the numbers entered are wrong or correct.

After finding out the password for the Bank's door, you'll have to go up the elevators to the different floors and pick up the objects (only one) until you place it in the right place and you can go get another. We will have to be cunning and place them intelligently, either to block an elevator and not take us to another floor, pile them up to be able to walk through the floors and thus, with great ingenuity, be able to reach the safe. We will find another problem, to open the safe we ​​have to enter another combination different from the one at the entrance door and if we fail like the bank door, we will fall into the hands of the police.

Listing

  • Listing - BURGLAR.BAS
10 REM Burglar Bill, by John Filsak
20 OPTION RUN:highmem!=HIMEM:MEMORY &HCFFF:DEFINT a-z
30 DIM a(53,31):e$=CHR$(27):cls$=e$+"E"+e$+"H
40 DEF FNat$(x,y,a$)=e$+"Y"+CHR$(y+32)+CHR$(x+32)+a$
50 RANDOMIZE PEEK(64504!):GOSUB 1740:play=-1:WHILE play:nicked=0
60 GOSUB 870:WHILE NOT nicked:GOSUB 140:WEND:PRINT cls$:x=0:y=4:POKE double,0
70 IF leave AND cracked=5 THEN a$="Game complete.  You have escaped with £"+MID$(STR$(haul),2)+"."ELSE a$="The police have caught up with you!
80 CALL pr(x,y,a$):y=8
90 IF leave AND cracked=5 THEN a$="But don't think you've got away for ever!"ELSE a$="You are sentenced to"+STR$(2+haul/100)+" years.
100 CALL pr(x,y,a$):y=14
110 a$="Play again?  (Y/N)":CALL pr(x,y,a$)
120 ans$="YN":GOSUB 850:IF ii=2 THEN play=0
130 WEND:MEMORY highmem!:WIDTH 90,90:PRINT e$"e"e$"1":RUN"menu
140 i$=UPPER$(INKEY$):IF i$="P"OR i$="Q"THEN GOSUB 570
150 IF i$=sp$THEN GOSUB 700
160 IF i$=CHR$(22)THEN GOSUB 770
170 IF i$=CHR$(28)THEN GOSUB 810
180 IF a(bx,by+2)=0 THEN CALL pr(bx,by,sp$):by=by+1:CALL pr(bx,by,b$)
190 IF a(bx,by+2)=10 AND a(bx,by-3)=0 THEN GOSUB 420
200 IF a(bx+j,by+1)=2 AND a(bx,by+2)>0 THEN GOSUB 350
210 IF bx=51 AND by=29 AND b$=br$THEN GOSUB 250
220 IF i$=e$THEN nicked=-1
230 t=t+1:IF t=3 THEN t=0:GOSUB 310 
240 i$="":POKE double,1:RETURN
250 PRINT CHR$(7);:GOSUB 1570:x=64:leave=0
260 PRINT FNat$(x,6,"You are at the door.")FNat$(x,8,"Do you wish to leave")
270 PRINT FNat$(x,9,"the building?  (Y/N)"):ans$="YN":GOSUB 850
280 IF ii=1 THEN nicked=-1:leave=-1
290 IF ii=2 THEN b$=bl$:j=-2:i=-1:GOSUB 1570:GOSUB 1620:POKE double,1:CALL pr(bx,by,b$)
300 RETURN
310 time=time-1:a$=MID$(STR$(time),2):a$=LEFT$("0000",4-LEN(a$))+a$
320 POKE double,0:CALL pr(tx,ty,a$):IF time<=0 THEN nicked=-1
330 RETURN
340 REM Open and empty safe
350 PRINT CHR$(7);:d$="safe":GOSUB 1570:GOSUB 1280
360 IF NOT nicked THEN GOSUB 1570:GOSUB 1620:GOSUB 380
370 RETURN
380 POKE double,0:POKE pen,85:x=bx+j:y=by+1:CALL pr(x,y,sf$):cracked=cracked+1
390 PRINT CHR$(7):POKE pen,255:a(x,y)=3:haul=haul+INT(RND*10)*100
400 a$=MID$(STR$(haul),2):CALL pr(hx,hy,a$):RETURN
410 REM Work lift
420 ly=by+1:FOR l=1 TO 4:PRINT FNat$(bx,by+2,c$+c$);
430 POKE double,0:CALL pr(bx,ly,flr$):ly=ly-1
440 POKE double,1:by=by-1:CALL pr(bx,by,b$):GOSUB 550:NEXT
450 ly=ly+1:IF a(bx,ly)=0 THEN GOSUB 510 ELSE GOSUB 470
460 RETURN
470 IF a(bx,ly)=1 THEN POKE pen,85
480 POKE double,0:CALL pr(bx,ly,flr$):POKE pen,255:ly=ly+1
490 CALL pr(bx,ly,flr$):GOSUB 550:FOR l=1 TO 3:CALL pr(bx,ly,sp$)
500 ly=ly+1:CALL pr(bx,ly,flr$):GOSUB 550:NEXT:RETURN
510 POKE double,1:ly1=by:by=by+1:CALL pr(bx,ly1,sp$):CALL pr(bx,by,b$):ly=ly+1
520 POKE double,0:CALL pr(bx,ly,flr$):GOSUB 550:FOR l=1 TO 3
530 POKE double,1:ly1=ly1+1:CALL pr(bx,ly1,sp$):by=by+1:CALL pr(bx,by,b$)
540 ly=ly+1:POKE double,0:CALL pr(bx,ly,flr$):GOSUB 550:NEXT:RETURN
550 FOR a=0 TO 200:NEXT:GOSUB 310:RETURN
560 REM Left and right
570 IF i$="P"AND b$=bl$THEN b$=br$:CALL pr(bx,by,b$):j=2:i=1:RETURN
580 IF i$="Q"AND b$=br$THEN b$=bl$:CALL pr(bx,by,b$):j=-2:i=-1:RETURN
590 f=a(bx+j,by+1):IF a(bx+j,by)>0 OR f>0 AND f<4 OR f=10 THEN RETURN
600 IF f>3 AND f<10 THEN blocked=0:GOSUB 620:IF blocked THEN RETURN
610 FOR e=1 TO 2:CALL pr(bx,by,sp$):bx=bx+i:CALL pr(bx,by,b$):NEXT:RETURN
620 POKE double,0:f$=f$(f):fx=bx+j:fy=by+1
630 IF a(fx+j,fy)>0 OR a(fx,by)>0 THEN blocked=-1:POKE double,1:RETURN
640 FOR e=1 TO 2:CALL pr(fx,fy,sp$):fx=fx+i:CALL pr(fx,fy,f$):NEXT
650 a(fx,fy)=f:a(bx+j,by+1)=0:IF a(fx,fy+1)=0 THEN GOSUB 670
660 POKE double,1:RETURN
670 WHILE a(fx,fy+1)=0:CALL pr(fx,fy,sp$):a(fx,fy)=0
680 fy=fy+1:CALL pr(fx,fy,f$):a(fx,fy)=f:WEND:RETURN
690 REM Jump
700 IF a(bx,by-1)>0 THEN RETURN
710 CALL pr(bx,by,sp$):by=by-1:CALL pr(bx,by,b$):f=a(bx+j,by+1)
720 IF a(bx+j,by)=0 AND f=0 THEN CALL pr(bx,by,sp$):bx=bx+j:CALL pr(bx,by,b$)
730 IF f>3 AND f<10 THEN blocked=0:GOSUB 620:IF blocked THEN RETURN
740 IF a(bx,by+2)=0 THEN CALL pr(bx,by,sp$):by=by+1:CALL pr(bx,by,b$)
750 RETURN
760 REM Pick up
770 f=a(bx+j,by+1):IF a(bx+j,by)>0 OR f<4 OR carry>0 THEN RETURN
780 POKE double,0:fx=bx+j:fy=by+1:CALL pr(fx,fy,sp$):a(fx,fy)=0
790 f$=f$(f):CALL pr(cx,cy,f$):carry=f:RETURN
800 REM Drop
810 IF a(bx+j,by+1)>0 OR carry=0 THEN RETURN
820 POKE double,0:fx=bx+j:fy=by+1:f$=f$(carry):CALL pr(fx,fy,f$)
830 CALL pr(cx,cy,sp$):GOSUB 670:a(fx,fy)=carry:carry=0:RETURN
840 REM Inkey$ routine
850 ii=0:i$="":WHILE ii=0 OR i$="":i$=UPPER$(INKEY$):ii=INSTR(ans$,i$):WEND:RETURN
860 REM Draw and furnish offices
870 ERASE a:DIM a(53,31):carry=0:PRINT cls$
880 POKE double,0:c$=CHR$(133):y=6:FOR x=0 TO 10 STEP 2
890 PRINT FNat$(x,y,CHR$(134)+CHR$(138)+CHR$(137))
900 y=y-1:NEXT:PRINT FNat$(x,y,CHR$(134))
910 a$=STRING$(30,138):PRINT FNat$(x+1,y,a$+CHR$(140))
920 a=LEN(a$)+1:FOR z=x+a TO x+a+10 STEP 2:y=y+1
930 PRINT FNat$(z,y,CHR$(131)+CHR$(138)+CHR$(140)):NEXT
940 x=3:PRINT FNat$(x-2,y,CHR$(132)+CHR$(141))FNat$(z-2,y,CHR$(135)+CHR$(132))
950 b=a:a=b/2+1:b=z-5-b/2:POKE pen,85:FOR w=y+1 TO 31
960 PRINT FNat$(x-3,w,c$+CHR$(149)+c$);:a(x-2,w)=1
970 IF w MOD 4=3 THEN GOSUB 1260 ELSE PRINT FNat$(a,w,STRING$(2,149))FNat$(b,w,STRING$(2,149)):a(a,w)=1:a(b,w)=1
980 PRINT FNat$(z-2,w,c$+CHR$(149)+c$);:a(z-2,w)=1:NEXT
990 bx=z+1:y=31:CALL pr(bx,y,flr$):RESTORE 1970
1000 POKE pen,255:x=16:y=3:a$="BANK OFFICES":CALL pr(x,y,a$)
1010 READ fx,fy,n:WHILE fx<>0 OR fy<>0 
1020 a(fx,fy)=n:IF n=0 THEN f$=sp$
1030 IF n=2 THEN f$=sf$
1040 IF n>3 AND n<10 THEN f$=f$(n)
1050 IF n=10 THEN f$=flr$
1060 CALL pr(fx,fy,f$):READ fx,fy,n:WEND
1070 GOSUB 1560:haul=0:time=4000:cracked=0:GOSUB 1600
1080 b$=bl$:by=29:j=-2:i=-1:POKE double,1:CALL pr(bx,by,b$)
1090 x=64:PRINT FNat$(x,6,"You are Burglar Bill,")
1100 PRINT FNat$(x,7,"intent on breaking into")
1110 PRINT FNat$(x,8,"the bank's offices and")
1120 PRINT FNat$(x,9,"stealing the contents")
1130 PRINT FNat$(x,10,"of the safes.")
1140 PRINT FNat$(x,11,"Some may be empty.")
1150 PRINT FNat$(x,13,"You will need all your")
1160 PRINT FNat$(x,14,"ingenuity to succeed,")
1170 PRINT FNat$(x,15,"and may not escape the")
1180 PRINT FNat$(x,16,"clutches of the police.")
1190 PRINT FNat$(x,18,"But first, you will need")
1200 PRINT FNat$(x,19,"to break in!")
1210 PRINT FNat$(x,21,"Press a key.")
1220 WHILE INKEY$="":WEND
1230 c=6:GOSUB 1570:d$="door":GOSUB 1280
1240 IF NOT nicked THEN GOSUB 1570:GOSUB 1620:POKE double,1:CALL pr(bx,by,sp$):bx=z-4:CALL pr(bx,by,b$)
1250 RETURN
1260 FOR c=x TO z-4:CALL pr(c,w,flr$):a(c,w)=1:NEXT:RETURN
1270 REM Puzzle
1280 x=64:PRINT FNat$(x,6,"Find the combination of")
1290 PRINT FNat$(x,7,"the "+d$+" in five goes")
1300 PRINT FNat$(x,8,"or less.")
1310 PRINT FNat$(x,10,"The combination will be")
1320 PRINT FNat$(x,11,"a sequence of three of")
1330 PRINT FNat$(x,12,"the numbers, 1,2,3,4,5.")
1340 PRINT FNat$(x,13,"Numbers may be repeated.")
1350 PRINT FNat$(x,15,e$+"rClues:-"+e$+"u")
1360 PRINT FNat$(x,16,blf$+" number in right place,")
1370 PRINT FNat$(x,17,ble$+" number in wrong place.")
1380 PRINT FNat$(x,19,"Type your sequence..."+e$+"e")
1390 your$="":goes=0:puz$="":FOR p=1 TO 5:p$(p)=MID$(puzzle$,p,1):NEXT
1400 FOR p=1 TO 3:q=1+INT(RND*5):puz$=puz$+p$(q):NEXT
1410 score$="":ans$=puzzle$:y=20:WHILE goes<5 AND your$<>puz$:time=time-50:GOSUB 1450:WEND
1420 IF your$=puz$THEN a$="You cracked it!"ELSE a$="You failed!":nicked=-1
1430 PRINT FNat$(x,y+1,a$):IF nicked THEN PRINT FNat$(x,y+2,"Code was "+puz$+".")
1440 PRINT FNat$(x,29,"Press a key."+e$+"f"):WHILE INKEY$="":WEND:RETURN
1450 PRINT FNat$(x,y,STR$(goes+1)+":  ");:your$="":FOR p=1 TO 3
1460 GOSUB 850:PRINT p$(ii);:your$=your$+p$(ii):NEXT
1470 score$="":goes=goes+1:y=y+1
1480 FOR p=1 TO 3:p1$(p)=MID$(your$,p,1):p2$(p)=MID$(puz$,p,1)
1490 IF p1$(p)=p2$(p)THEN score$=score$+blf$:p1$(p)="*":p2$(p)="*"
1500 NEXT:FOR p=1 TO 3:IF p1$(p)="*"THEN 1530
1510 FOR q=1 TO 3:IF p1$(p)=p2$(q)THEN score$=score$+ble$:p1$(p)="*":p2$(q)="*":q=3
1520 NEXT
1530 NEXT:IF score$=""THEN score$="---"
1540 PRINT SPC(2)score$:RETURN
1550 REM Draw box
1560 a=62:b=1:c=2:h=29:r=26:PRINT FNat$(a,b,CHR$(134)+STRING$(r,138)+CHR$(140))
1570 a=62:FOR b=c TO h:PRINT FNat$(a,b,c$+SPACE$(r)+c$):NEXT
1580 PRINT FNat$(a,b,CHR$(131)+STRING$(r,138)+CHR$(137));:RETURN
1590 REM Titles, etc
1600 x=64:y=2:a$="BURGLAR BILL":POKE double,1:POKE paper,85
1610 CALL pr(x,y,a$):POKE paper,0:POKE double,0:RETURN
1620 POKE double,0:a$="Time:"+STR$(time):tx=x:ty=6:CALL pr(tx,ty,a$):tx=76
1630 hx=x:hy=8:a$="Haul: £"+MID$(STR$(haul),2):CALL pr(hx,hy,a$):hx=78
1640 a$="Carrying: "+f$(carry):cx=x:cy=10:CALL pr(cx,cy,a$):cx=84
1650 y=14:a$="Q - left":CALL pr(x,y,a$)
1660 y=16:a$="P - right":CALL pr(x,y,a$)
1670 y=18:a$="SPACE - jump":CALL pr(x,y,a$)
1680 y=20:a$=plus$+" - pick up":CALL pr(x,y,a$)
1690 y=22:a$=minus$+" - drop":CALL pr(x,y,a$)
1700 y=24:a$="EXIT - stop":CALL pr(x,y,a$)
1710 y=27:a$="Press a key.":CALL pr(x,y,a$):WHILE INKEY$="":WEND
1720 PRINT FNat$(x,y,SPACE$(LEN(a$)*2)):RETURN
1730 REM Set up machine code, etc
1740 RESTORE 2110:address=&HE000
1750 READ code:WHILE code<256:POKE address,code:address=address+1:READ code:WEND
1760 screen=&HE000:pr=&HE003:udgs=&HD100:pen=&HD001:paper=&HD000:double=&HD006
1770 WIDTH 255,255:POKE paper,0:POKE double,0:POKE pen,255
1780 RESTORE 1840:FOR a=0 TO 95:READ b:POKE udgs+a,b:NEXT
1790 sp$=" ":bl$=CHR$(0):br$=CHR$(1):flr$=CHR$(2):sf$=CHR$(3):f$(4)=CHR$(4)
1800 f$(5)=CHR$(5):f$(6)=CHR$(6):f$(7)=CHR$(7):f$(8)=CHR$(8):f$(9)=CHR$(9)
1810 plus$=CHR$(10):minus$=CHR$(11):blf$=CHR$(188):ble$=CHR$(187):puzzle$="12345
1820 PRINT cls$e$"0"e$"f":CALL screen:RETURN
1830 REM user-defined graphics
1840 DATA 24,24,8,28,58,24,20,52
1850 DATA 24,24,16,56,92,24,40,44
1860 DATA 255,68,170,17,170,68,255,0
1870 DATA 126,126,118,110,126,126,126,126
1880 DATA 255,255,102,102,102,102,102,102
1890 DATA 60,36,36,255,219,255,255,255
1900 DATA 255,129,129,129,129,255,177,255
1910 DATA 96,96,124,124,108,108,108,108
1920 DATA 60,60,60,60,61,63,61,60
1930 DATA 66,66,126,66,66,126,66,66
1940 DATA 0,127,65,73,93,73,65,127
1950 DATA 0,127,65,65,93,65,65,127
1960 REM Position and type of furniture, lifts, etc
1970 DATA 3,30,4,3,29,2,37,22,2,31,20,2,31,22,4,31,21,4,15,10,2
1980 DATA 51,14,2,37,31,10,45,27,0,41,26,5,35,29,0,35,28,0,33,31,10
1990 DATA 31,26,4,31,25,6,29,26,7,21,27,0,17,25,0,17,24,0,19,30,8
2000 DATA 5,31,10,7,31,10,5,27,0,11,27,10,11,23,10,11,19,10,5,23,0
2010 DATA 13,22,5,19,19,10,21,19,10,29,19,0,31,19,0
2020 DATA 33,19,0,17,18,0,17,17,0,19,15,10,21,15,0,23,15,0,25,15,0
2030 DATA 27,15,0,29,15,0,31,15,0,3,14,9,3,13,8,5,15,10,13,14,7
2040 DATA 15,13,6,15,14,4,19,23,10,19,22,9,19,21,8,13,11,0,15,9,5
2050 DATA 17,9,0,17,8,0,19,11,0,23,10,7,25,10,4,25,9,6,27,10,9
2060 DATA 27,9,8,33,11,0,35,11,0,37,11,0,5,19,10,35,12,8
2070 DATA 51,11,0,47,10,7,45,10,7,43,10,7,43,9,7,45,9,7
2080 DATA 49,15,10,49,19,10,35,18,0,35,17,0,51,19,0,49,23,10
2090 DATA 49,27,10,39,23,0,51,23,0,49,18,5,0,0,0
2100 REM Machine code
2110 DATA 195,6,224,195,91,224,205,41,224,17,152,44,33,0,182,1,104,1,62
2120 DATA 32,245,213,62,8,115,35,114,35,19,61,32,248,209,235,9,235,241,61
2130 DATA 32,236,201,193,205,90,252,233,0,201,102,26,111,34,2,208,10,50,16
2140 DATA 208,3,10,111,3,10,103,237,75,16,208,6,0,17,19,208,237,176,42
2150 DATA 2,208,205,252,224,34,4,208,33,19,208,34,17,208,201,205,48,224,205
2160 DATA 41,224,243,42,17,208,126,35,34,17,208,205,234,224,17,79,225,1,8
2170 DATA 0,237,176,221,42,4,208,14,8,253,33,79,225,42,0,208,125,6,8
2180 DATA 253,203,0,6,56,13,7,221,203,8,22,221,203,0,22,7,195,164,224
2190 DATA 203,4,221,203,8,22,221,203,0,22,203,4,221,203,8,22,221,203,0
2200 DATA 22,16,215,253,35,58,6,208,167,202,209,224,221,126,8,221,119,9,221
2210 DATA 126,0,221,119,1,221,35,121,254,5,194,209,224,1,200,2,221,9,79
2220 DATA 221,35,13,194,130,224,42,4,208,1,16,0,9,34,4,208,33,16,208
2230 DATA 53,194,98,224,251,201,17,0,184,254,32,48,3,17,0,209,111,38,0
2240 DATA 41,41,41,25,201,92,38,0,84,203,37,1,15,225,9,78,35,70,235
2250 DATA 41,41,41,9,201,48,89,0,92,208,94,160,97,112,100,64,103,16,106
2260 DATA 224,108,176,111,128,114,80,117,32,120,240,122,192,125,144,128,96,131,48
2270 DATA 134,0,137,208,139,160,142,112,145,64,148,16,151,224,153,176,156,128,159
2280 DATA 80,162,32,165,240,167,192,170,144,173,96,176,0,0,0,0,0,0,256

Controls

       Q = LEFT
       P = RIGHT
       + = GET OBJECT
       - = DROP OBJECT
   SPACE = JUMP
    EXIT = EXIT

Loading the program

 1.- Insert the CP/M disc on side 2
 2.- Write BASIC and wait for it to load
 3.- Remove the CP/M disk and insert the disk containing the Burglar Bill game
 4.- Type run "Burglar" and press the "ENTER" key

Download

en/burglar_bill.txt · Last modified: 2022/06/30 01:36 by jevicac