! 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

       MAP1 GAME'VAL
               MAP2 AR,S,1
               MAP2 TM,F

!       XCALL MEMLOD,"DSK0:TTYIN.SBR[7,6]"
10      ?TAB(-1,0):TM=900:XCALL BOX,10,28,10,45:?TAB(10,30);&
       "BOKI AND HUNTER";
20      MOVE=CHR(11)+CHR(10)+CHR(8)+CHR(12)+CHR(22)+CHR(13)

!30     FST=30
!40     DIM(FST+2,2):RANDOMIZE  !COLUMN=1, ROW=2



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

2260 EXIT0:
2270    ?TAB(BOKIR,BOKIC);" ";
2280    ON BD GOTO 2290,2300,2310,2320
2290    BOKIR=BOKIR-1:GOTO DSP'BOKI
2300    BOKIC=BOKIC+1:GOTO DSP'BOKI
2310    BOKIR=BOKIR+1:GOTO DSP'BOKI
2320    BOKIC=BOKIC-1:GOTO DSP'BOKI

2500 DSP'BOKI:
2510    IF YOUR=BOKIR AND YOUC=BOKIC THEN GOTO YOU'DIE
2520    ?TAB(BOKIR,BOKIC);"B";
2530    GOTO ARROW


2600 BOKI'DIE:
2610 YOU'DIE:   ?TAB(BOKIR,BOKIC);"K";TAB(-1,12); &
               CHR(7);CHR(7);CHR(7);:
2620 ASK'MORE:
2630    ?TAB(17,5);:INPUT "ANOTHER HUNT (Y/N)? ",AN$
2640    IF AN$="Y" THEN CHAIN "CMD:HUNTER.CMD"
2650    ?TAB(-1,0);:END


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