! Boki and Hunter Game
!*****************************************************************************
!
! * * * * * * ******* ******* *****
! * * * * ** * * * * *
! * * * * * * * * * * *
! ******* * * * * * * **** *****
! * * * * * * * * * * *
! * * * * * ** * * * *
! * * ***** * * * ******* * *
!
!
! Written by Soo Bok Jeon SBJ/AM Sometime in 1985
!
!*****************************************************************************
!
! Donated to AMUS in March of 1986 for free distribution to all
! members of the Alpha Micro Users Society. This program is not
! to be resold.
!
!*****************************************************************************
!
! Requires the following subroutines
! BOX.SBR Already resident on NETWORK
! MEMLOD.SBR Sent with this program
! NOECHO.SBR[7,6] Standard AMOS issue
! TTYIN.SBR Sent with this program
!
!*****************************************************************************
!
! Put the following HUNTER.CMD on DSK0:[2,2].
!
!; RUN BOKI & HUNTER Game
!:R
!:< READY?>
!DING 1
!:< SET...>
!DING 1
!:< GO!>
!DING 1
!RUN HUNTER
!
!*****************************************************************************
5 MAP1 MOVE,S,6:ON ERROR GOTO ASK'MORE
FST=30
MAP1 BRUSH(32)
MAP2 FST(2),F
RANDOMIZE
50 FST(1,1)=INT(27*RND(0)+3):FST(1,2)=INT(20*RND(0)+2)
60 FOR J=2 TO FST+2:
70 FST(J,1)=INT(27*RND(0)+3):FST(J,2)=INT(20*RND(0)+2)
80 FOR I=1 TO J-1:IF FST(J,1)=FST(I,1) AND FST(J,2)=FST(I,2) &
THEN GOTO 70
90 NEXT I:NEXT J:?TAB(-1,0);:CALL MENU
150 XCALL NOECHO
1000 ARROW:
1020 XCALL TTYIN,A$
1030 AR=INSTR(1,MOVE,A$)
1040 CALL TIME'LEFT
1045 IF AR>0 THEN GOTO MOV'AR
1050 GOTO MOV'BOKI
1060 MOV'AR:
1070 ON AR GOTO UP,DOWN,LEFT,RIGHT,DOWN,PICK'UP
1080 GOTO ARROW
1090 UP:IF YOUR=<2 THEN GOTO ARROW
1100 FOR J=1 TO FST:IF FST(J,1)=YOUC AND FST(J,2)=YOUR-1 &
THEN GOTO FIND'UP
1110 NEXT J
1120 ?TAB(YOUR,YOUC);" ";:YOUR=YOUR-1:?TAB(YOUR,YOUC);"H";
1125 IF YOUC=BOKIC AND YOUR-1=BOKIR THEN YOUR=BOKIR
1130 GOTO ARROW
1140 FIND'UP:IF YOUR-1=<2 THEN GOTO ARROW
1145 IF YOUC=BOKIC AND YOUR-2=BOKIR THEN GOTO ARROW
1150 FOR I=1 TO FST
1160 IF FST(I,1)=YOUC AND FST(I,2)=YOUR-2 THEN GOTO ARROW
1170 NEXT I
1180 FST(J,2)=FST(J,2)-1
1190 ?TAB(FST(J,2),FST(J,1));TAB(-1,11)"*";TAB(-1,12);
1200 ?TAB(YOUR,YOUC);" ";:YOUR=YOUR-1:?TAB(YOUR,YOUC);"H";
1210 GOTO ARROW
1220 DOWN: IF YOUR=>22 THEN GOTO ARROW
1230 FOR J=1 TO FST
1240 IF FST(J,1)=YOUC AND FST(J,2)=YOUR+1 THEN GOTO FIND'DOWN
1250 NEXT J
1260 ?TAB(YOUR,YOUC);" ";:YOUR=YOUR+1:?TAB(YOUR,YOUC);"H";
1165 IF YOUC=BOKIC AND YOUR+1=BOKIR THEN YOUR=BOKIR
1270 GOTO ARROW
1280 FIND'DOWN: IF YOUR+1>=22 THEN GOTO ARROW
1285 IF YOUC=BOKIC AND YOUR+2=BOKIR THEN GOTO ARROW
1290 FOR I=1 TO FST
1300 IF FST(I,1)=YOUC AND FST(I,2)=YOUR+2 THEN GOTO ARROW
1310 NEXT I
1320 FST(J,2)=FST(J,2)+1
1330 ?TAB(FST(J,2),FST(J,1));TAB(-1,11);"*";TAB(-1,12);
1340 ?TAB(YOUR,YOUC);" ";:YOUR=YOUR+1:?TAB(YOUR,YOUC);"H";
1350 GOTO ARROW
1360 LEFT: IF YOUC<=2 THEN GOTO ARROW
1370 FOR J=1 TO FST
1380 IF FST(J,2)=YOUR AND FST(J,1)=YOUC-1 THEN GOTO FIND'LEFT
1390 NEXT J
1400 ?TAB(YOUR,YOUC);" ";:YOUC=YOUC-1:?TAB(YOUR,YOUC);"H";
1405 IF YOUR=BOKIR AND YOUC-1=BOKIC THEN YOUC=BOKIC
1410 GOTO ARROW
1420 FIND'LEFT: IF YOUC-1<=2 THEN GOTO ARROW
1425 IF YOUR=BOKIR AND YOUC-2=BOKIC THEN GOTO ARROW
1430 FOR I=1 TO FST
1440 IF FST(I,2)=YOUR AND FST(I,1)=YOUC-2 THEN GOTO ARROW
1450 NEXT I
1460 FST(J,1)=FST(J,1)-1
1470 ?TAB(FST(J,2),FST(J,1));TAB(-1,11);"*";TAB(-1,12);
1480 ?TAB(YOUR,YOUC);" ";:YOUC=YOUC-1:?TAB(YOUR,YOUC);"H";
1490 GOTO ARROW
1500 RIGHT:IF YOUC=>29 THEN GOTO ARROW
1510 FOR J=1 TO FST
1520 IF FST(J,2)=YOUR AND FST(J,1)=YOUC+1 THEN GOTO FIND'RIGHT
1530 NEXT J
1540 ?TAB(YOUR,YOUC);" ";:YOUC=YOUC+1:?TAB(YOUR,YOUC);"H";
1545 IF YOUR=BOKIR AND YOUC+1=BOKIC THEN YOUC=BOKIC
1550 GOTO ARROW
1560 FIND'RIGHT: IF YOUC+1>=29 THEN GOTO ARROW
1565 IF YOUR=BOKIR AND YOUC+2=BOKIC THEN GOTO ARROW
1570 FOR I=1 TO FST
1580 IF FST(I,2)=YOUR AND FST(I,1)=YOUC+2 THEN GOTO ARROW
1590 NEXT I
1600 FST(J,1)=FST(J,1)+1
1620 ?TAB(FST(J,2),FST(J,1));TAB(-1,11);"*";TAB(-1,12);
1630 ?TAB(YOUR,YOUC);" ";:YOUC=YOUC+1:?TAB(YOUR,YOUC);"H";
1640 GOTO ARROW
1650 PICK'UP:
1660 IF YOUR=3 THEN GOTO UP'PIC
1670 IF YOUR=21 THEN GOTO DOWN'PIC
1680 IF YOUC=3 THEN GOTO LEFT'PIC
1690 IF YOUC=28 THEN GOTO RIGHT'PIC
1700 GOTO ARROW
1710 UP'PIC:
1720 FOR J=1 TO FST
1730 IF FST(J,1)=YOUC AND FST(J,2)=YOUR-1 THEN GOTO 1750
1740 NEXT J:GOTO ARROW
1750 FOR I=I TO FST
1760 IF FST(I,1)=YOUC AND FST(I,2)=YOUR+1 THEN GOTO ARROW
1770 NEXT I:?TAB(FST(J,2),FST(J,1));" ";
1780 FST(J,2)=YOUR:?TAB(FST(J,2),FST(J,1));TAB(-1,11);"*";TAB(-1,12);
1785 YOUR=YOUR+1:?TAB(YOUR,YOUC);"H";
1790 GOTO ARROW
1800 DOWN'PIC:
1810 FOR J=1 TO FST
1820 IF FST(J,1)=YOUC AND FST(J,2)=YOUR+1 THEN GOTO 1840
1830 NEXT J:GOTO ARROW
1840 FOR I=1 TO FST
1850 IF FST(I,1)=YOUC AND FST(I,2)=YOUR-1 THEN GOTO ARROW
1860 NEXT I:?TAB(FST(J,2),FST(J,1));" ";
1870 FST(J,2)=YOUR:?TAB(FST(J,2),FST(J,1));TAB(-1,11);"*";TAB(-1,12);
1880 YOUR=YOUR-1:?TAB(YOUR,YOUC);"H";
1890 GOTO ARROW
1900 LEFT'PIC:
1910 FOR J=1 TO FST
1920 IF FST(J,2)=YOUR AND FST(J,1)=YOUC-1 THEN GOTO 1940
1930 NEXT J:GOTO ARROW
1940 FOR I=1 TO FST
1950 IF FST(I,2)=YOUR AND FST(I,1)=YOUC+1 THEN GOTO ARROW
1960 NEXT I:?TAB(FST(J,2),FST(J,1));" ";
1970 FST(J,1)=YOUC:?TAB(FST(J,2),FST(J,1));TAB(-1,11);"*";TAB(-1,12);
1980 YOUC=YOUC+1:?TAB(YOUR,YOUC);"H";
1990 GOTO ARROW
2000 RIGHT'PIC:
2010 FOR J=1 TO FST
2020 IF FST(J,2)=YOUR AND FST(J,1)=YOUC+1 THEN GOTO 2040
2030 NEXT J:GOTO ARROW
2040 FOR I=1 TO FST
2050 IF FST(I,2)=YOUR AND FST(I,1)=YOUC-1 THEN GOTO ARROW
2060 NEXT I:?TAB(FST(J,2),FST(J,1));" ";
2070 FST(J,1)=YOUC:?TAB(FST(J,2),FST(J,1));TAB(-1,11);"*";TAB(-1,12);
2080 YOUC=YOUC-1:?TAB(YOUR,YOUC);"H";
2090 GOTO ARROW
2100 MOV'BOKI:BK(1)=0:BK(2)=0:BK(3)=0:BK(4)=0
2120 IF BOKIR=2 THEN BK(1)=1
2130 IF BOKIC=29 THEN BK(2)=1
2135 IF BOKIR=22 THEN BK(3)=1
2140 IF BOKIC=2 THEN BK(4)=1
2150 FOR J=1 TO FST
2160 IF FST(J,1)=BOKIC AND FST(J,2)=BOKIR-1 THEN BK(1)=1
2170 IF FST(J,1)=BOKIC AND FST(J,2)=BOKIR+1 THEN BK(3)=1
2180 IF FST(J,2)=BOKIR AND FST(J,1)=BOKIC+1 THEN BK(2)=1
2190 IF FST(J,2)=BOKIR AND FST(J,1)=BOKIC-1 THEN BK(4)=1
2200 NEXT J:BK=0
2210 FOR J=1 TO 4:IF BK(J)=1 THEN BK=BK+1:NEXT J
2220 IF BK=4 THEN GOTO BOKI'DIE
2203 CR=BOKIR-YOUR:CC=BOKIC-YOUC:MINE=(RND(YOUR)*15):IF MINE<7 THEN &
GOTO NEAR
2240 FAR:
2250 BD=INT(4*RND(BD)+1):IF BK(BD)=1 THEN GOTO 2250
2700 NEAR:
2710 IF CC<=0 AND CR>0 THEN BD=1:GOTO EXIT1
2720 IF CC<0 AND CR<=0 THEN BD=2:GOTO EXIT1
2730 IF CC>=0 AND CR<0 THEN BD=3:GOTO EXIT1
2740 BD=4:GOTO EXIT1
2750 EXIT1:
2760 IF BK(BD)=1 THEN GOTO FAR
2770 GOTO EXIT0
2780 TIME'LEFT:
2790 TM=TM-1:?TAB(20,47);SPACE(6);
2795 ?TAB(20,47);TM;
2810 IF TM=0 THEN GOTO YOU'DIE
2820 RETURN
2840 MENU:XCALL BOX,5,34,5,55
2850 ?TAB(5,35);" BOKI AND HUNTER. ";
2860 ?TAB(9,35);"By: Soo Bok Jeon.";
2861 ?TAB(12,35);"CAGE THE MAD BOKI BY CORRALING IT WITH BRUSH";
2862 ?TAB(13,35);"BEFORE THE TIME RUNS OUT. WATCH OUT!........";
2863 ?TAB(14,35);"THE BOKI HAS A MEAN BITE!";
2880 XCALL BOX,02,02,22,29:XCALL BOX,20,34,20,55
2890 ?TAB(20,35);"TIME LEFT : ";TM;
2900 FOR J=1 TO FST:?TAB(FST(J,2),FST(J,1));"*";:NEXT J:?TAB(-1,12);
2910 YOUC=FST(FST+2,1):YOUR=FST(FST+2,2):?TAB(YOUR,YOUC);"H";
2920 BOKIC=FST(FST+1,1):BOKIR=FST(FST+1,2):?TAB(BOKIR,BOKIC);"B";
2930 RETURN