Nessie is a shooting game. Two rows of Loch Ness monster sections scroll across the screen in opposite directions, and you move a launcher left and right along the bottom with 5 and 8 and fire with 0. You have 20 missiles; hitting the upper row scores 20 and the lower row 10, and clearing a row earns a bonus of 1,000 or 2,000 points and brings the row back. The highest score of the session is kept.
Nessie is one of the programs in Peter Shaw’s book Games for your Timex-Sinclair 2000. This keyboard version came from an Oliger disk that also held the book’s Egg Savior, Box Bounce and Spider ‘n’ Fly.
Program Analysis
Structure
The monsters are two 32-character strings, a$ and b$, made of user-defined graphics. Each pass of the main loop rotates them in opposite directions with string slicing and reprints them, then reads the keys and redraws the launcher. Firing (line 1000) moves the missile up the screen while the rows keep moving, and checks the character at the missile’s column when it reaches each row.
Notable Techniques
- Scrolling by rotation:
LET b$=b$(2 TO )+b$(1)andLET a$=a$(LEN a$)+a$( TO (LEN a$)-1). - Movement uses logical expressions:
LET h=h+(INKEY$="8" AND h<30)-(INKEY$="5" AND h>0).
Potential Issues
- A hit near either edge of the screen appears to fail with “Subscript wrong”: lines 4000 and 5000 blank
a$(b-4 TO b+4), which runs past the ends of the string when the launcher is within four columns of an edge.
The program was saved on the disk without an auto-run line; on this tape it starts automatically. It was tested in ZEsarUX: the scrolling rows, the launcher and firing work.
Source Code
10 REM Nessie
20 LET hi=0: GO SUB 9000
30 GO SUB 8000
40 LET s=0: LET mis=20: GO SUB 7000
50 PRINT AT 5,0;a$''b$
60 LET h=h+(INKEY$="8" AND h<30)-(INKEY$="5" AND h>0)
70 IF INKEY$="0" THEN LET mis=mis-1: GO SUB 1000
75 IF mis<1 THEN GO TO 500
80 PRINT AT 20,h; INK 6;" abc "
90 LET b$=b$(2 TO )+b$(1)
100 LET a$=a$(LEN a$)+a$( TO (LEN a$)-1)
101 PRINT AT 0,0; PAPER 5; INK 0;"SCORE ";s,"MISSLES ";mis;" "
110 IF b$=" " THEN GO SUB 2000
120 IF a$=" " THEN GO SUB 3000
140 GO TO 50
500 PRINT AT 10,12; FLASH 1;"GAME OVER"
501 PRINT AT 0,0; PAPER 5; INK 0;"SCORE ";s,"MISSLES ";mis;" "
510 PRINT AT 12,10;"You scored ";s
520 IF s>hi THEN LET hi=s
525 PRINT ''TAB 4;"Highest score today ";hi
530 INPUT "PRESS ANY KEY TO PLAY AGAIN"; LINE a$: GO TO 30
1000 LET b=h+2
1010 FOR f=19 TO 4 STEP -1
1012 PRINT AT f,b;"h"
1019 BEEP .001,-(f-30)
1020 PRINT AT 5,0;a$''b$
1030 LET h=h+(INKEY$="8" AND h<30)-(INKEY$="5" AND h>0)
1040 PRINT AT 20,h; INK 6;" abc "
1050 LET b$=b$(2 TO )+b$(1)
1060 LET a$=a$(LEN a$)+a$( TO (LEN a$)-1)
1070 IF f=5 THEN IF a$(b)<>" " THEN GO TO 4000
1080 IF f=7 THEN IF b$(b)<>" " THEN GO TO 5000
1090 PRINT AT f,b;" "
1100 NEXT f: RETURN
2000 PRINT AT 10,7; FLASH 1;"BONUS 1000 POINTS"
2010 LET b$="defg defg defg defg "
2011 LET s=s+1000
2015 BEEP .1,20: BEEP .2,15
2020 FOR p=1 TO 150: NEXT p
2040 PRINT AT 10,7;" ": RETURN
3000 PRINT AT 10,7; FLASH 1;"BONUS 2000 POINTS"
3010 LET a$="defg defg defg defg "
3011 LET s=s+2000
3015 BEEP .1,20: BEEP .2,15
3030 PRINT AT 10,7;" ": RETURN
4000 LET a$(b-4 TO b+4)=" "
4010 LET s=s+20
4011 BEEP .05,-5
4020 RETURN
5000 LET b$(b-4 TO b+4)=" "
5010 LET s=s+10
5011 BEEP .05,-5
5020 RETURN
7000 BORDER 7: PAPER 7: INK 4: CLS
7010 FOR a=0 TO 3: PRINT PAPER 5;" ";: NEXT a
7020 RETURN
8000 LET a$="defg defg defg defg "
8010 LET b$="defg defg defg defg "
8020 LET h=15
8022 LET s=0
8030 RETURN
8900 REM **********************
8910 REM
8920 REM Graphics
8930 REM
8940 REM abc - abc
8950 REM
8960 REM defg - defg
8970 REM
8980 REM h - h
8990 REM
8999 REM **********************
9000 FOR a=USR "a" TO USR "h"+7
9010 READ user: POKE a,user
9020 NEXT a: RETURN
9030 DATA 0,0,0,127,255,255,255,255
9040 DATA 0,24,60,255,255,255,255,255
9050 DATA 0,0,0,254,255,255,255,255
9060 DATA 0,96,248,252,127,63,15,7
9070 DATA 1,15,31,63,255,255,240,192
9080 DATA 128,240,248,255,255,63,31,7
9090 DATA 2,15,15,255,255,252,248,192
9100 DATA 24,60,60,24,60,26,0,0Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

