1 REM ********************************
2 REM *                              *
3 REM *        Chocky Chick          *
4 REM *              by              *
5 REM *          Jon Revis           *
6 REM *              for             *
7 REM *     Home Computing Weekly    *
8 REM *   Based on an original idea  *
9 REM * By Dave Carlos and Jon Revis *
10 REM*                              *
11 REM********************************
12 '
13 '
20 MODE 0
30 GOSUB 180 : REM characters
40 GOSUB 970 : REM initialise
50 GOSUB 760 : REM build characters
60 GOSUB 2290 : REM border
70 GOSUB 2430 : REM intro
80 GOSUB 1310 : REM background
90 EVERY 25,3 GOSUB 1610
98 '
99 '
100 WHILE chick > -1
110 GOSUB 880 : REM read keyboard
120 WEND
130 WHILE INKEY$ <> "" : WEND
135 '
136 '
140 DI
150 GOSUB 2290 : REM border
160 GOSUB 2520 : REM outro
170 END
178 '
179 '
180 REM **** Characters ****
190 SYMBOL AFTER 220
200 SYMBOL 221,0,0,0,0,7,15,31,29
210 SYMBOL 222,62,63,95,95,120,112,0,0
220 SYMBOL 223,0,0,0,0,192,224,224,240
230 SYMBOL 224,184,112,240,224,0,0,0,0
240 SYMBOL 225,0,0,0,0,0,32,32,32
250 SYMBOL 226,64,64,0,0,0,0,224,161
260 SYMBOL 227,48,56,12,24,48,24,12,4
270 SYMBOL 228,0,0,0,0,176,152,136,220
280 SYMBOL 229,0,0,0,0,0,0,0,2
290 SYMBOL 230,1,0,32,32,0,0,0,0
300 SYMBOL 231,12,28,48,24,12,24,48,32
310 SYMBOL 232,64,128,0,0,0,0,0,0
320 SYMBOL 233,0,0,28,54,55,63,63,29
330 SYMBOL 234,14,15,7,3,0,0,0,0
340 SYMBOL 235,20,28,0,0,0,64,192,192
350 SYMBOL 236,0,0,0,0,0,0,0,3
360 SYMBOL 237,0,0,0,0,160,160,160,240
370 SYMBOL 238,0,0,0,8,8,0,0,2
380 SYMBOL 239,1,0,0,0,0,0,0,0
390 SYMBOL 240,28,28,73,0,8,93,62,28
400 SYMBOL 241,0,34,54,127,119,34,0,0
410 SYMBOL 242,240,128,162,162,162,187,128,240
420  SYMBOL 243,0,0,181,166,165,181,0,0
430 SYMBOL 244,0,0,20,56,4,52,0,0
440 SYMBOL 245,0,8,8,6,122,72,16,0
450 SYMBOL 246,8,20,34,65,129,130,108,16
460 SYMBOL 247,255,255,255,255,255,255,255,255
470 RETURN
480 '
490 '
500 REM **** Construct Multi-Coloured Characters
510 a$=""
520 FOR n% = 0 TO z%
530 READ char%
540 a$ = a$ + CHR$(char%)
550 NEXT n%
560 RETURN
568 '
569 '
570 REM ***** data for hen2$ *****
580 DATA 22,1,9,15,1,221,8,15,3,225,8,15,5,229,8,15,1,223,8,10,224,8,15,3,228,8,15,5,232,8,8,15,1,222,8,15,3,226,8,15,5,230,22,0
590 REM ***** data for hen1$ *****
600 DATA 22,1,15,1,233,8,15,3,235,8,15,5,238,15,1,223,8,10,224,8,15,3,237,8,15,5,232,8,8,15,1,234,8,15,3,236,8,15,5,239,22,0
610 REM ***** data for wipe$ *****
620 DATA 22,1,15,0,247,247,8,8,10,247,247,22,0
630 REM ***** data for rock$ *****
640 DATA 22,1,15,14,244,8,15,15,245,8,15,5,246,22,0
650 REM ***** data for t$ *****
660 DATA 67,72,79,67,75,89,32,69,71,71
670 REM ***** data for worm$(0) *****
680 DATA 22,1,15,11,227,22,0
690 REM ***** data for worm$(1) *****
700 DATA 22,1,15,11,231,22,0
710 REM ***** data for egg$ *****
720 DATA 22,1,15,3,240,8,15,1,241,22,0
730 REM ***** data for worm wipe$ *****
740 DATA 15,12,247
748 '
749 '
750 REM ***** construct characters *****
760 RESTORE 580
770 z% = 43 : GOSUB 500 : hen2$ = a$
780 z% = 41 : GOSUB 500 : hen1$ = a$
790 z% = 12 : GOSUB 500 : wipe$ = a$
800 z% = 14 : GOSUB 500 : rock$ = a$
810 z% = 9 : GOSUB 500 : t$ = a$
820 z% = 6 : GOSUB 500 : worm$(0) = a$
830 z% = 6 : GOSUB 500 : worm$(1) = a$
840 z% = 10 : GOSUB 500 : egg$ = a$
850 z% = 2 : GOSUB 500 : wipe2$ = a$
860 RETURN
868 '
869 '
870 REM ***** read keyboard *****
880 flag = 0
890 IF NOT INKEY(71) THEN x = x - 1 : flag = 1
900 IF x < 1 THEN x = 1
910 IF NOT INKEY(63) THEN x = x + 1 : flag = 1
920 IF x > 14 THEN x = 14
930 IF NOT INKEY(18) THEN GOSUB 1200
940 IF flag = 1 THEN GOSUB 1130
950 RETURN
958 '
959 '
960 REM ***** initialise variables *****
970 x = 10 : y = 10
980 ox = x : oy = y
990 wf = 0
1000 DIM worm$(1)
1010 chick = 2 : worm = 9
1020 tot = 0 : eaten = 0
1030 wx = 10 : wy = 24
1040 owx = wx : owy = wy
1050 DIM rx(2),ry(2)
1060 RESTORE 1100
1070 FOR n% = 0 TO 2
1080 READ rx(n%),ry(n%)
1090 NEXT n%
1100 DATA 3,16,6,20,12,16
1105 ENV 1,5,3,1,2,-3,1,1,0,10,3,-3,1
1110 RETURN
1118 '
1119 '
1120 REM ***** print hen *****
1130 CALL &BD19
1140 LOCATE ox,oy : PRINT USING "&";wipe$
1150 CALL &BD19
1160 LOCATE x,y : PRINT USING "&";hen1$
1170 ox = x : oy = y
1180 RETURN
1188 '
1189 '
1190 REM ***** pecking hen *****
1200 CALL &BD19
1210 LOCATE ox,oy : PRINT USING "&";wipe$
1220 CALL &BD19
1230 LOCATE x,y : PRINT USING "&";hen2$
1240 CALL &BD19
1250 LOCATE x,y : PRINT USING "&";wipe$
1260 CALL &BD19
1270 LOCATE x,y : PRINT USING "&";hen1$
1275 SOUND 1,800,10,15,1
1280 ox = x : oy = y
1290 RETURN
1298 '
1299 '
1300 REM ***** background *****
1310 '
1320 z = REMAIN(3)
1330 MODE 0
1340 BORDER 0
1350 WINDOW #1,1,20,12,25
1360 PAPER #1,12
1370 CLS #1
1380 WINDOW #2,16,19,4,11
1390 PAPER #2,8
1400 CLS #2
1410 WINDOW #3,17,18,6,8
1420 PAPER #3,2
1430 CLS #3
1440 CALL &BD19
1450 LOCATE 17,7 : PRINT USING "&";hen1$
1460 CALL &BD19
1470 LOCATE x,y : PRINT USING "&";wipe$
1480 x = 10 : ox = x
1490 CALL &BD19
1500 LOCATE x,y : PRINT USING "&";hen1$
1510 FOR n% = 0 TO 2
1520 LOCATE rx(n%),ry(n%) : PRINT USING "&";rock$
1530 NEXT n%
1540 GOSUB 2090
1550 FOR n% = 10 TO 10 + (chick-1)
1560 IF chick > -1 THEN LOCATE n%+2,1 : PRINT USING "&";hen1$ ELSE LOCATE n%+2,1 : PRINT USING "&";wipe$
1570 NEXT n%
1580 EVERY 25,3 GOSUB 1610
1590 RETURN
1598 '
1599 '
1600 REM ***** move worm *****
1610 LOCATE owx,owy : PRINT USING "&";wipe2$
1620 IF RND > 0.5 THEN wx = wx - 1 ELSE wx = wx + 1
1630 wy = wy - 1
1640 CALL &BD19
1650 LOCATE wx,wy : PRINT USING "&";worm$(wf)
1660 GOSUB 1770 : IF crash = 1 THEN GOSUB 1820
1670 owx = wx : owy = wy
1680 IF NOT INKEY(18) AND wy = 12 AND (wx = x OR wx = x-1) THEN eaten = eaten + 1 : tot = tot + 1 : SOUND 1,50,10,15
1690 IF eaten = 5 THEN GOSUB 2210
1700 IF wy = 12 THEN wy = 24 : worm = worm - 1 : GOSUB 2090
1710 IF worm < 0 THEN chick = chick - 1 : worm = 9 : eaten = 0 : GOSUB 1310 : RETURN
1720 IF wx = 13 THEN wx = wx - 1
1730 IF wx = 1 THEN wx = wx + 1
1740 IF wf = 0 THEN wf = 1 ELSE wf = 0
1750 RETURN
1758 '
1759 '
1760 REM ***** check for worm hitting a rock *****
1770 FOR n% = 0 TO 2
1780 IF wx = rx(n%) AND wy = ry(n%) THEN crash = 1
1790 NEXT n%
1800 RETURN
1808 '
1809 '
1810 REM ***** radioactive worm *****
1820 '
1830 MOVE (wx*32)-16,(24-wy)*20
1840 DRAW (wx*32)-16,220,3
1850 FOR n% = 1 TO 500 : NEXT n%
1860 MOVE (wx*32)-16,(24-wy)*20
1870 DRAW (wx*32)-16,220,12
1880 LOCATE wx,wy : PRINT USING "&";wipe2$
1890 LOCATE wx,wy : PRINT USING "&";rock$
1895 SOUND 1,30,10,15,1,1
1900 crash = 0 : wy = 24
1910 GOSUB 2090
1920 IF wx = x THEN GOSUB 1950
1930 RETURN
1938 '
1939 '
1940 REM ***** explode chicken *****
1950 z = REMAIN(3)
1960 FOR n% = 1 TO 50
1970 c = INT(RND(1)*16)
1980 a = INT(RND(1)*600)
1990 b = INT(RND(1)*150)
2000 MOVE (wx*32)-16,220
2010 DRAW a,b+220,c
2020 SOUND 1,b,5,15
2030 NEXT n%
2040 chick = chick - 1
2050 worm = 9 : eaten = 0 : x = 10
2060 GOSUB 1310
2070 RETURN
2078 '
2079 '
2080 REM ***** scores *****
2090 PAPER 12
2100 PEN 5
2110 LOCATE 15,14 : PRINT "Worms"
2120 LOCATE 15,15 : PRINT "Eaten"
2130 LOCATE 16,16 : PRINT ;eaten
2140 LOCATE 15,18 : PRINT "Worms"
2150 LOCATE 15,19 : PRINT "Left"
2160 LOCATE 16,20 : PRINT ;worm
2170 LOCATE 15,22 : PRINT "Total"
2180 LOCATE 16,23 : PRINT ;tot
2190 RETURN
2198 '
2199 '
2200 REM ***** Lay egg *****
2210 worm = 9 : eaten = 0 : chick = chick + 1
2220 CALL &BD19
2230 LOCATE x,y : PRINT USING "&";hen1$
2240 LOCATE x+2,y+1 : PRINT USING "&";egg$
2250 FOR n% = 1000 TO 50 STEP -50
2255 SOUND 1,n%,5,15
2258 NEXT n%
2260 GOSUB 1310
2270 RETURN
2278 '
2279 '
2280 REM ***** draw border *****
2290 MODE 0
2300 BORDER 1
2310 PAPER 0
2320 CLS
2330 FOR n% = 1 TO 18 STEP 2
2340 LOCATE n%,1 : PRINT USING "&";hen1$
2350 LOCATE n%,24 : PRINT USING "&";hen1$
2360 NEXT n%
2370 FOR n% = 4 TO 22 STEP 2
2380 LOCATE 1,n% : PRINT USING "&";hen1$
2390 LOCATE 18,n% : PRINT USING "&";hen1$
2400 NEXT n%
2410 RETURN
2418 '
2419 '
2420 REM ***** intro *****
2430 LOCATE 4,5 : PRINT "Chocky Chick"
2440 LOCATE 6,9 : PRINT "Z : Left"
2450 LOCATE 6,11 : PRINT "X : Right"
2460 LOCATE 4,13 : PRINT "Enter : Peck"
2470 LOCATE 4,19 : PRINT "Press Any Key"
2480 LOCATE 4,21 : PRINT "To Start Game"
2490 WHILE INKEY$ = "" : WEND
2500 RETURN
2508 '
2509 '
2510 REM ***** outro *****
2520 '
2530 LOCATE 4,5 : PRINT "Chocky Chick"
2540 LOCATE 3,10 : PRINT "Your Score Was"
2550 LOCATE 9,12 : PRINT tot
2560 LOCATE 4,19 : PRINT "Press Any Key"
2570 LOCATE 4,21 : PRINT "To Start Game"
2580 WHILE INKEY$ = "" : WEND
2590 RUN
2600 RETURN