! 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