Random game
Random hardware
Random demo
  • Entry name:
     Nessie 
  • Category:
    Games
  • Publisher/Developer:
    Compute! Publications, Inc., Flop 5
  • Year:
    1989
  • Atari conversion:
    Tom R. Halhill,GIA Software
  • Controllers:
    Joystick
  • Maximum players:
    1
  • Programming language:
    Atari BASIC
Nessie Nessie Nessie Nessie Nessie Nessie Nessie Nessie Nessie
Listing 1
100 REM 
110 REM | NESSIE |
120 REM 
130 REM - for all ATARI XL/XE
140 REM - BASIC & ML mix
150 REM (c) 1985
160 REM by Tom R. Halhill
170 REM COMPUTE! Publications
180 REM (p) 1989
190 REM by GIA Software
200 GOSUB 11000:​REM Initialize
210 GOSUB 12000:​REM Redefine characters
215 GOTO 13000:​REM Setups
220 GOTO 10000:​REM Main loop
1000 REM Move Nessie & decoys
1020 POKE SCREEN+COORD(OBJECT),​0:​NOOCOORD=COORD(OBJECT)+MOVE(INT(RND(0)*9)+1)
1040 IF NOOCOORD<40 OR NOOCOORD>239 THEN COORD(OBJECT)=INT(RND(0)*200)+40:​RETURN
1060 POKE SCREEN+NOOCOORD,​CHAR(OBJECT):​COORD(OBJECT)=NOOCOORD:​RETURN
2000 REM Snap photo
2020 POKE 77,​0:​FILM=FILM-1:​POSITION 15,​0:​? #6;" ":​POSITION 15,​0:​? #6;FILM:​SOUND 0,​0,​0,​0
2040 FRAME(PHOTO)=PEEK(53252):​HAIR(PHOTO)=PEEK(53253):​BLUR(PHOTO)=STICK(0):​PHOTO=PHOTO+1
2060 SETCOLOR 4,​9,​4:​IF FILM<6 THEN POKE 704,​28
2080 IF FILM=0 THEN SOUND 0,​240,​10,​15:​POP:​TIME=INT((PEEK(18)*65536+PEEK(19)*256+PEEK(20))/60):​GOTO 2200
2100 BUTTON=STRIG(0):​RETURN
2200 A=USR(ADR(VBOFF$)):​SOUND 0,​0,​0,​0:​FOR I=1 TO 1000:​NEXT I:​GOTO 14000
10000 REM Main loop
10020 POKE HITCLR,​0
10040 IF STRIG(0)=1 THEN BUTTON=1
10340 IF STRIG(0)=0 AND BUTTON=1 THEN POKE 712,​14:​SOUND 0,​4,​8,​15:​GOSUB 2000
10380 OBJECT=OBJECT+1:​IF OBJECT>6 THEN OBJECT=1
10400 GOSUB 1000:​REM Move objects
10420 GOTO 10000
11000 REM Init P/M & ML
11060 GRAPHICS 2+16:​SETCOLOR 2,​0,​0:​? #6;" nessie":​? #6:​? #6;" PLEASE WAIT":​? #6;" 21 SECONDS"
11080 PM=PEEK(106)-8:​PMBASE=256*PM:​HITCLR=53278
11100 FOR I=PMBASE+512 TO PMBASE+768:​POKE I,​0:​NEXT I
11120 RESTORE 11280:​DIM WIDEFRAME$(20):​FOR I=1 TO 20:​READ A:​WIDEFRAME$(I,​I)=CHR$(A):​NEXT I:​REM Wide viewfinder
11140 RESTORE 11300:​DIM TELEFRAME$(20):​FOR I=1 TO 20:​READ A:​TELEFRAME$(I,​I)=CHR$(A):​NEXT I:​REM Tele viewfinder
11160 RESTORE 11340:​DIM WIDEHAIR$(20):​FOR I=1 TO 20:​READ A:​WIDEHAIR$(I,​I)=CHR$(A):​NEXT I:​REM Wide crosshair
11180 RESTORE 11360:​DIM TELEHAIR$(20):​FOR I=1 TO 20:​READ A:​TELEHAIR$(I,​I)=CHR$(A):​NEXT I:​REM Tele crosshair
11200 POKE 704,​130:​POKE 705,​198:​REM Blue viewfinder & green crosshair
11220 POKE 559,​46:​POKE 623,​1:​POKE 53277,​3:​POKE 54279,​PM:​POKE 53256,​3:​POKE 53257,​3:​REM P/M setup
11240 HORIZ0=116:​VERT0=PMBASE+512+61:​HORIZ1=118:​VERT1=PMBASE+640+66:​REM Initial positions
11245 FOR I=1 TO 20:​POKE VERT0+I,​ASC(WIDEFRAME$(I)):​NEXT I:​POKE 53248,​HORIZ0:​REM Draw viewfinder
11250 FOR I=1 TO 20:​POKE VERT1+I,​ASC(WIDEHAIR$(I)):​NEXT I:​POKE 53249,​HORIZ1:​REM Draw crosshair
11260 REM Viewfinder shapes
11280 DATA 255,​255,​129,​129,​129,​129,​129,​129,​129,​129,​129,​129,​129,​129,​129,​129,​129,​255,​255,​0
11300 DATA 255,​129,​129,​129,​129,​129,​129,​129,​129,​255,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0
11320 REM Crosshair shapes
11340 DATA 16,​16,​16,​16,​124,​16,​16,​16,​16,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0
11360 DATA 16,​16,​124,​16,​16,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0
11380 REM Flip shape routine
11400 DIM FLIP$(25):​RESTORE 11420:​FOR I=1 TO 25:​READ A:​FLIP$(I,​I)=CHR$(A):​NEXT I
11420 DATA 104,​104,​133,​204,​104,​133,​203,​104,​133,​207,​104,​133,​206,​160,​0,​177,​206,​145,​203,​200,​192,​20,​208,​247,​96
11440 REM Read joymove routine
11460 RESTORE 11480:​FOR I=0 TO 204:​READ A:​POKE 1536+I,​A:​NEXT I
11480 DATA 174,​120,​2,​224,​14,​208
11490 DATA 3,​32,​172,​6,​224,​6
11500 DATA 208,​6,​32,​172,​6,​32
11510 DATA 107,​6,​224,​7,​208,​3
11520 DATA 32,​107,​6,​224,​5,​208
11530 DATA 6,​32,​140,​6,​32,​107
11540 DATA 6,​224,​13,​208,​3,​32
11550 DATA 140,​6,​224,​9,​208,​6
11560 DATA 32,​140,​6,​32,​74,​6
11570 DATA 224,​11,​208,​3,​32,​74
11580 DATA 6,​224,​10,​208,​6,​32
11590 DATA 172,​6,​32,​74,​6,​76
11600 DATA 98,​228,​173,​253,​6,​201
11610 DATA 48,​240,​25,​206,​253,​6
11620 DATA 206,​253,​6,​173,​253,​6
11630 DATA 141,​0,​208,​206,​251,​6
11640 DATA 206,​251,​6,​173,​251,​6
11650 DATA 141,​1,​208,​96,​96,​173
11660 DATA 253,​6,​201,​176,​240,​25
11670 DATA 238,​253,​6,​238,​253,​6
11680 DATA 173,​253,​6,​141,​0,​208
11690 DATA 238,​251,​6,​238,​251,​6
11700 DATA 173,​251,​6,​141,​1,​208
11710 DATA 96,​96,​172,​252,​6,​192
11720 DATA 96,​176,​24,​160,​0,​177
11730 DATA 203,​145,​205,​136,​192,​0
11740 DATA 208,​247,​238,​252,​6,​238
11750 DATA 252,​6,​238,​250,​6,​238
11760 DATA 250,​6,​96,​96,​172,​252
11770 DATA 6,​192,​28,​144,​24,​160
11780 DATA 0,​177,​205,​145,​203,​200
11790 DATA 192,​255,​208,​247,​206,​252
11800 DATA 6,​206,​252,​6,​206,​250
11810 DATA 6,​206,​250,​6,​96,​96
11820 REM Set up vblank
11900 DIM VBSETUP$(11):​RESTORE 11920:​FOR I=1 TO 11:​READ A:​VBSETUP$(I)=CHR$(A):​NEXT I
11920 DATA 104,​162,​6,​160,​0,​169,​7,​32,​92,​228,​96
11940 DIM VBOFF$(11):​FOR I=1 TO 11:​READ A:​VBOFF$(I)=CHR$(A):​NEXT I
11960 DATA 104,​162,​228,​160,​98,​169,​7,​32,​92,​228,​96
11980 DIM LENS$(18):​DIM MOVE(9),​CHAR(6),​COORD(6),​FRAME(20),​HAIR(20),​BLUR(20),​PICTURE(20),​CAPTION(30):​RETURN
12000 REM Redefine characters
12020 CHSET=(PEEK(106)-8)*256:​FOR I=0 TO 512:​POKE CHSET+I,​PEEK(57344+I):​NEXT I
12021 RESTORE 12025
12022 READ A:​IF A=-1 THEN RETURN
12023 FOR J=0 TO 7:​READ B:​POKE CHSET+A*8+J,​B:​NEXT J
12024 GOTO 12022
12025 DATA 1,​255,​255,​192,​192,​192,​192,​129,​192
12026 DATA 3,​255,​255,​3,​3,​3,​3,​3,​3
12027 DATA 4,​3,​3,​3,​3,​3,​3,​3,​3
12028 DATA 5,​3,​3,​3,​3,​3,​3,​255,​255
12029 DATA 6,​0,​0,​0,​0,​0,​0,​255,​255
12030 DATA 7,​192,​192,​192,​192,​192,​192,​255,​255
12031 DATA 8,​192,​192,​192,​192,​192,​192,​192,​192
12032 DATA 9,​0,​0,​0,​0,​0,​0,​213,​127
12033 DATA 10,​0,​0,​64,​192,​85,​127,​126,​0
12034 DATA 11,​0,​0,​2,​3,​170,​254,​126,​0
12035 DATA 12,​0,​0,​0,​0,​0,​0,​171,​254
12036 DATA 13,​0,​0,​56,​125,​222,​125,​56,​0
12037 DATA 14,​0,​0,​28,​190,​123,​190,​28,​0
12038 DATA 26,​5,​10,​21,​42,​84,​168,​80,​128
12039 DATA 27,​255,​255,​0,​0,​0,​0,​0,​0
12040 DATA 32,​0,​32,​48,​32,​224,​224,​0,​0
12041 DATA -1
13000 REM Set up screen
13020 SETCOLOR 4,​9,​4:​POKE 756,​CHSET/256:​? #6;CHR$(125):​SETCOLOR 3,​12,​2:​SETCOLOR 0,​4,​8:​SETCOLOR 2,​0,​0
13040 FILM=20:​LENS=1:​LENS$="wideangletelephoto":​SCREEN=PEEK(88)+PEEK(89)*256
13060 ? #6;" ":​? #6:​? #6;" <select> ";LENS$(LENS,​LENS+8):​? #6;" <start> game"
13062 POSITION 0,​8:​? #6;CHR$(171);" NESSIE=2000/20000":​POSITION 0,​9:​? #6;CHR$(192);" CROP = 100/ 1000"
13064 POSITION 0,​10:​? #6;CHR$(174);CHR$(172);" FOOLED= 50/ 500":​POSITION 0,​11:​? #6;CHR$(186);" BLUR = 0"
13070 POSITION 10,​7:​? #6;CHR$(171)
13080 SOUND 0,​0,​0,​0:​POSITION 10,​3:​? #6;LENS$(LENS,​LENS+8):​IF PEEK(53279)=6 THEN 13160
13100 IF PEEK(53279)<>5 THEN 13080
13110 LENS=LENS+9:​IF LENS>10 THEN LENS=1
13115 IF LENS=1 THEN 13125
13120 IF LENS>1 THEN 13140
13125 A=USR(ADR(FLIP$),​VERT0,​ADR(WIDEFRAME$)):​POKE 53256,​3:​SOUND 0,​160,​10,​15
13128 FOR I=VERT1 TO VERT1+2:​POKE I,​0:​NEXT I:​VERT1=VERT1+3:​A=USR(ADR(FLIP$),​VERT1,​ADR(WIDEHAIR$)):​POKE 53257,​3
13130 POSITION 9,​6:​? #6;" ":​POSITION 10,​7:​? #6;CHR$(171):​HORIZ1=118:​POKE 53249,​HORIZ1:​GOTO 13080
13140 A=USR(ADR(FLIP$),​VERT0,​ADR(TELEFRAME$)):​POKE 53256,​1:​SOUND 0,​80,​10,​15
13145 VERT1=VERT1-3:​A=USR(ADR(FLIP$),​VERT1,​ADR(TELEHAIR$)):​POKE 53257,​1
13150 POSITION 10,​7:​? #6;" ":​POSITION 9,​6:​? #6;"":​HORIZ1=117:​POKE 53249,​HORIZ1:​GOTO 13080
13160 SOUND 0,​120,​10,​15:​? #6;CHR$(125):​POSITION 0,​0:​? #6;"nessie FILM=";FILM;""
13180 COLOR ASC(""):​PLOT 0,​1:​DRAWTO 19,​1
13200 MOVE(1)=-20:​MOVE(2)=-19:​MOVE(3)=1:​MOVE(4)=21:​MOVE(5)=20:​MOVE(6)=19
13220 MOVE(7)=-1:​MOVE(8)=-21:​MOVE(9)=250:​CHAR(1)=9:​CHAR(2)=139:​CHAR(3)=77:​CHAR(4)=201:​CHAR(5)=14:​CHAR(6)=204
13240 FOR OBJECT=1 TO 6:​COORD(OBJECT)=INT(RND(0)*200)+40:​POKE SCREEN+COORD(OBJECT),​CHAR(OBJECT):​NEXT OBJECT
13250 PHOTO=1
13260 POKE 1789,​HORIZ0:​POKE 1787,​HORIZ1
13270 POKE 1788,​61:​POKE 203,​0:​REM VERT0 lo byte
13280 POKE 204,​(PMBASE+512)/256:​REM VERT0 hi byte
13290 POKE 1786,​194:​POKE 207,​128:​REM VERT1 lo byte
13300 POKE 208,​(PMBASE+512)/256:​REM VERT1 hi byte
13310 POKE 205,​2:​REM Lo byte for vert memory shift
13320 POKE 206,​(PMBASE+512)/256:​REM Hi byte for vert memory shift
13330 IF LENS>1 THEN POKE 1647,​192:​POKE 1680,​106:​REM Reset range check for telephoto
13340 A=USR(ADR(VBSETUP$)):​POKE 18,​0:​POKE 19,​0:​POKE 20,​0:​SOUND 0,​0,​0,​0:​GOTO 220
14000 REM Develop film
14050 POKE 53277,​0:​POKE 53261,​0:​POKE 53262,​0
14060 GRAPHICS 0:​SETCOLOR 2,​0,​0:​DLIST=PEEK(560)+256*PEEK(561):​SCREEN=PEEK(88)+256*PEEK(89):​REM P/M off
14070 POKE 756,​CHSET/256:​POKE 752,​1:​? CHR$(125);:​POSITION 0,​16:​POKE 82,​0
14080 RESTORE 14100:​FOR I=6 TO 26:​READ A:​POKE DLIST+I,​A:​NEXT I
14100 DATA 6,​6,​6,​2,​2,​6,​6,​6,​2,​2,​6,​6,​6,​2,​2,​6,​6,​6,​2,​2,​6
14110 FOR I=1 TO 15:​READ A:​POKE SCREEN+672+I,​A:​NEXT I
14112 FOR I=PMBASE+512 TO PMBASE+768:​POKE I,​0:​NEXT I
14115 DATA 36,​37,​54,​37,​44,​47,​48,​41,​46,​39,​0,​38,​41,​44,​45
14120 FOR II=1 TO 4
14140 FOR I=0 TO 19:​READ A:​POKE SCREEN+40+I,​A:​NEXT I
14160 DATA 1,​27,​3,​0,​1,​27,​3,​0,​1,​27,​3,​0,​1,​27,​3,​0,​1,​27,​3,​0
14180 FOR I=0 TO 19:​READ A:​POKE SCREEN+60+I,​A:​NEXT I
14200 DATA 8,​0,​4,​0,​8,​0,​4,​0,​8,​0,​4,​0,​8,​0,​4,​0,​8,​0,​4,​0
14220 FOR I=0 TO 19:​READ A:​POKE SCREEN+80+I,​A:​NEXT I
14240 DATA 7,​6,​5,​0,​7,​6,​5,​0,​7,​6,​5,​0,​7,​6,​5,​0,​7,​6,​5,​0
14260 RESTORE 14160:​SCREEN=SCREEN+140:​NEXT II
14280 RESTORE 14300:​SCREEN=PEEK(88)+256*PEEK(89):​FOR I=0 TO 5:​READ A:​POKE SCREEN+606+I,​A:​NEXT I
14300 DATA 46,​37,​51,​51,​41,​37
14350 FOR I=1 TO 20:​READ A:​PICTURE(I)=A:​NEXT I
14355 DATA 61,​65,​69,​73,​77,​201,​205,​209,​213,​217,​341,​345,​349,​353,​357,​481,​485,​489,​493,​497
14356 FOR I=1 TO 30:​READ A:​CAPTION(I)=A:​NEXT I
14357 DATA 34,​44,​53,​50,​0,​0,​35,​50,​47,​48,​0,​0,​38,​47,​47,​44,​37,​36,​46,​37,​51,​51,​41,​37,​0,​0,​0,​0,​0,​0
14360 RESTORE 14510:​SCORE=0:​SETCOLOR 1,​0,​0:​FOR I=1 TO 21
14365 IF I=21 THEN 14520
14370 IF BLUR(I)<>15 THEN POKE SCREEN+PICTURE(I),​90:​X=0:​GOSUB 14500:​NEXT I
14380 IF HAIR(I)=4 AND FRAME(I)<>4 THEN SCORE=SCORE+2000:​POKE SCREEN+PICTURE(I),​203:​X=18:​GOSUB 14500:​NEXT I
14390 F=FRAME(I):​H=HAIR(I)
14400 IF F>3 AND F<>8 AND F<>9 AND F<>10 THEN SCORE=SCORE+100:​POKE SCREEN+PICTURE(I),​96:​X=6:​GOSUB 14500:​NEXT I
14420 IF HAIR(I)>0 THEN SCORE=SCORE+50:​POKE SCREEN+PICTURE(I),​76:​X=12:​GOSUB 14500:​NEXT I
14440 X=24:​GOSUB 14500:​NEXT I
14500 SOUND 0,​12*I,​10,​7:​READ A:​FOR II=1 TO 6:​POKE SCREEN+PICTURE(I)+A+II,​CAPTION(II+X):​NEXT II
14505 SOUND 0,​0,​0,​0:​RETURN:​REM Print captions
14510 DATA 38,​42,​46,​50,​54,​38,​42,​46,​50,​54,​38,​42,​46,​50,​54,​38,​42,​46,​50,​54,​54:​REM Caption locations
14520 FOR I=0 TO 6:​SETCOLOR 0,​5,​I:​FOR II=1 TO 8:​NEXT II:​NEXT I
14540 FOR I=0 TO 8:​SETCOLOR 3,​15,​I:​FOR II=1 TO 8:​NEXT II:​NEXT I
14550 FOR I=0 TO 10:​SETCOLOR 1,​12,​I:​FOR II=1 TO 8:​NEXT II:​NEXT I
14560 RESTORE 14570:​FOR I=0 TO 6:​READ A:​POKE SCREEN+632+I,​A:​NEXT I
14570 DATA 51,​35,​47,​50,​37,​0,​29
14620 RESTORE 14640:​FOR I=1 TO 22:​READ A:​POKE SCREEN+666+I,​A:​NEXT I
14640 DATA 52,​47,​0,​50,​37,​48,​44,​33,​57,​0,​51,​46,​33,​48,​0,​51,​40,​53,​52,​52,​37,​50
14650 IF LENS>1 THEN SCORE=SCORE*10
14660 ? INT((4/TIME)*SCORE);
14680 IF STRIG(0)=1 THEN 14680
14700 SOUND 0,​4,​8,​15:​FOR I=1 TO 3:​NEXT I:​SOUND 0,​0,​0,​0:​POKE 53248,​0:​POKE 53249,​0:​POKE 704,​130
14720 GRAPHICS 2+16:​HORIZ0=116:​VERT0=PMBASE+512+61:​HORIZ1=118:​VERT1=PMBASE+640+66:​POKE 53277,​3:​POKE 559,​46
14740 POKE 53256,​3:​POKE 53257,​3:​FOR I=1 TO 20:​POKE VERT0+I,​ASC(WIDEFRAME$(I)):​NEXT I:​POKE 53248,​HORIZ0
14760 FOR I=1 TO 20:​POKE VERT1+I,​ASC(WIDEHAIR$(I)):​NEXT I:​POKE 53249,​HORIZ1:​GOTO 13000	

This is non-commercial site, its content is based on Atari 8-bit home computer contents and references.
If you feel your rights are violated by showing/using any part of contents of your product represented on this page, please contact me immediatelly so I can remove it!