[ 53280,0:53281,0:646,(162):"":" USE LYNX TO DISSOLVE THIS FILE":10 1 LYNX IX BY WILL CORLEY 5 SNAKE.S 73 P 29 SNAKE.HDR 6 P 72 SNAKEHI.HDR 6 P 72 SNAKE.LNK 4 P 189 SNAKE.README 7 P = snake.s= c HPRG formatted GEOS file V1.0AWrite Image V2.0geoWrite V1.1~C5B'*vFxz0` ; Snake v1.0 ;  @A DA for GEOS ;  @(c) Asbjoern Djupdal Sep. 1999 .if Pass1 .include geosSym .include loadmoveMac ; Std. GEOS makroer .include addMac ; splittet opp i mindre .include subMac ; filer .include cmpMac .include stackMac .include miscMac .endif ; du maa forandre 'hiscores' hvis du forandrer disse! NUM_SCORES = 8 ; antall navn i hiscore-liste HI_NAME_LENGTH = 13 ; lengde paa navn pluss null-byte og word-poeng WIN_TOPC = 3 ; antall cards WIN_LEFTC = 10 WIN_HEIGHTC = 19 ; ikke forandre disse! WIN_WIDTHC = 18 LOWEST_SCORE = (NUM_SCORES*HI_NAME_LENGTH) - 2 TOPBORDER == (WIN_TOPC*8)+16 LEFTBORDER == (WIN_LEFTC*8)+8 BOTTOMBORDER == (WIN_TOPC*8+(WIN_HEIGHTC)*8)-9 RIGHTBORDER == (WIN_LEFTC*8+(WIN_WIDTHC)*8)-9 STARTX = (WIN_LEFTC+((WIN_WIDTHC-2)/2))*8 STARTY = (WIN_TOPC+1+((WIN_HEIGHT-3)/2))*8 l0`0 .psect  @SnakeStart: MoveB r10L,recoverFlag ; lagre skjermdata i buffer jsr SaveScre0`0 .psect  @SnakeStart: MoveB r10L,recoverFlag ; lagre skjermdata i buffer jsr SaveScreen jsr SaveColors LoadW r0,#DrawWindow ; tegn vindu jsr GraphicsString LoadW r0,#MenuTable ; lag meny lda #0 jsr DoMenu jsr UseSystemFont ; still inn tekstvariabler LoadB leftMargin,LEFTBORDER LoadB windowTop,(WIN_TOPC*8)+1 LoadW rightMargin,RIGHTBORDER LoadB windowBottom,BOTTOMBORDER LoadB r0L,0 ; hent inn hiscore-liste LoadW r6,scorename jsr GetFile LoadW keyVector,getdir jsr init ; init alle variabler ++ jmp mainloop n0`0 @init: jsr MouseOff jsr cleanboard jsr i_PutString ; skriv ut lengde 08` .word (WIN_LEFTC*8)+70 .byte (WIN_TOPC*8)+10 0`0 @init: jsr MouseOff jsr cleanboard jsr i_PutString ; skriv ut lengde 08` .word (WIN_LEFTC*8)+70 .byte (WIN_TOPC*8)+10 .byte "Length: 1 ",0 0` LoadB array0,STARTX-4 ; reset array LoadB array0+1,STARTY LoadB array0+2,STARTX LoadB array0+3,STARTY LoadB xdir,4 ; reset variabler LoadB ydir,0 LoadW head,2 LoadW tail,0 LoadW length,1 LoadW vlength,1 LoadB ptscounter,1 rts o0`0` @cleanboard @: lda #0 ; rensk "spillebrett" jsr SetPattern jsr i_Rectangle 08` .byte TOPBORDER .byte BOTTOMBORDER .word LEFTBORDER .word RIGHTBORDER 0` rts 0`  @mainloop: jsr drawsnake ; tegn hode, slett hale jsr updateht ; oppdater head & tail MoveB speed,r0L ; sov 'speed' ticks LoadB r0H,0 jsr Sleep jsr updatearray ; plasser koords i array jsr checkforpts ; tatt poeng? jsr placepts ; plasser ut poeng jmp mainloop r0`0 ; inn:  @r1 : index inn i array ; ut:  @r0L : x verdi,  @r0H : y verdi ; forandr.:  @a ,  @x ,  @y ,  @r0 ,  @r3  @getchain0`0 ; inn:  @r1 : index inn i array ; ut:  @r0L : x verdi,  @r0H : y verdi ; forandr.:  @a ,  @x ,  @y ,  @r0 ,  @r3  @getchain: ldx r1H ; array-nr cpx #1 beq 10$ cpx #2 beq 20$ cpx #3 beq 30$ LoadW r3,array0 bra 40$ 10$: LoadW r3,array1 bra 40$ 20$: LoadW r3,array2 bra 40$ 30$: LoadW r3,array3 40$: ldy r1L ; index lda (r3),y sta r0L iny lda (r3),y sta r0H rts _t0`0 ; inn:  0`0 ; inn:  @r1L : x-verdi,  @r1H : y-verdi ; ut:  @array ; forandr.:  @a ,  @x ,  @y ,  @r3 ,  @array  @puthead: ldx head+1 cpx #1 beq 10$ cpx #2 beq 20$ cpx #3 beq 30$ LoadW r3,array0 bra 40$ 10$: LoadW r3,array1 bra 40$ 20$: LoadW r3,array2 bra 40$ 30$: LoadW r3,array3 40$: ldy head lda r1L sta (r3),y iny lda r1H sta (r3),y rts ,w0`0 @checkforpts @: MoveW head,r1 jsr 0`0 @checkforpts @: MoveW head,r1 jsr getchain MoveB r0L,r3L LoadB r3H,0 MoveB r0H,r11L jsr TestPoint bcc 10$ ; ingen poeng jsr GetRandom lda random ; oek lengde and #15 add #1 sta r0L LoadB r0H,0 AddW r0,vlength lda random+1 ; sett lengde til neste poeng and #15 add #1 sta ptscounter lda #0 ; oppdater statuslinje jsr SetPattern jsr i_Rectangle ; slett gammel lengde 08` .byte (WIN_TOPC*8)+3 .byte (WIN_TOPC*8)+11 .word (WIN_LEFTC*8)+104 .word (WIN_LEFTC*8)+132 0`0 LoadB r1H,(WIN_TOPC*8)+10 ; skriv ut ny poengsum LoadW r11,(WIN_LEFTC*8)+104 MoveW vlength,r0 lda #192 jsr PutDecimal 10$: rts y0`0 @placepts: 0`0 @placepts: lda ptscounter cmp #1 beq 10$ ; plasser ut poeng bcs 20$ ; vent med aa plassere rts ; der er poeng ute 10$: jsr GetRandom lda random ; faa ny x-verdi and #31 asl a ; multipliser med 4 asl a add #LEFTBORDER sta r2L sta tempL lda random+1 ; faa ny y-verdi and #31 asl a ; multipliser med 4 asl a add #TOPBORDER sta r2H sta tempH jsr isonsnake ; er poeng paa slange? bcs 10$ ; hvis ja, finn ny pos lda tempH ; tegn poeng sta r2L add #3 sta r2H lda tempL sta r3L add #3 sta r4L lda #0 sta r3H sta r4H lda #1 jsr SetPattern jsr Rectangle 08`20$: 0`0 dec ptscounter rts {0`0 ; inn:  @r2L : x-verdi, 0`0 ; inn:  @r2L : x-verdi,  @r2H : x-verdi ; ut:  @carry : ja/nei ; forandr:  @a ,  @x ,  @y ,  @r0 ,  @r1 ,  @r2  @isonsnake: MoveW tail,r1 10$: jsr getchain CmpW r0,r2 beq 20$ ; er paa slange CmpW r1,head beq 30$ ; ferdig, er ikke paa slange AddVW #2,r1 ; sjekk neste ledd CmpWI r1,1024 bne 10$ LoadW r1,0 bra 10$ 20$: sec rts 30$ clc rts |0`0 @updateht @: AddVW #2,head 0`0 @updateht @: AddVW #2,head ; oppdater hode-indeks CmpWI head,1024 bne 10$ LoadW head,0 10$: CmpW vlength,length ; skal hale oppdateres? bne 30$ ; ikke lang nok - vent AddVW #2,tail ; oppdater hale-index CmpWI tail,1024 bne 20$ LoadW tail,0 20$: rts 30$: IncW length rts UUUUUUUUUUUU=========!=$       0`0 @updatearray @: lda oldxpos ; gammel x-pos add xdir cmp #LEFTBORDER bmi diesnake cmp #RIGHTBORDER bcs diesnake sta r2L sta tempL lda oldypos ; gammel y-pos add ydir cmp #TOPBORDER bmi diesnake cmp #BOTTOMBORDER bcs diesnake sta r2H sta tempH LoadW r1,0 ; skriv null i ny hode pos jsr puthead jsr isonsnake ; kjoert paa egen hale? bcs diesnake ; hvis ja, doe MoveW temp,r1 ; skriv ny hode pos jsr puthead rts h0`0 @di0`0 @diesnake: PopW r0 ; fjerner denne rts adresse ldx #LOWEST_SCORE ; peker til laveste lengde lda hiscores+1,x cmp vlength+1 bne 10$ lda hiscores,x cmp vlength 10$: bcc insertscore ; denne er lengre jsr MouseUp rts l0`0 @insertscore: ldx #LOWEST_SCORE - HI_NAME_LENGTH 10$: lda hiscores+1,x cmp vlength+1 bne 11$ lda hiscores,x cmp vlength 11$: bcs 30$ ; sett inn under denne txa sub #HI_NAME_LENGTH - 2 tax LoadB counter,HI0`0 @insertscore: ldx #LOWEST_SCORE - HI_NAME_LENGTH 10$: lda hiscores+1,x cmp vlength+1 bne 11$ lda hiscores,x cmp vlength 11$: bcs 30$ ; sett inn under denne txa sub #HI_NAME_LENGTH - 2 tax LoadB counter,HI_NAME_LENGTH-2 + 1 20$: ; kopi rutine lda hiscores,x sta hiscores+HI_NAME_LENGTH,x inx dec counter bne 20$ txa sub #HI_NAME_LENGTH + 1 tax bra 10$ 30$: ; sett inn denne score inx inx stx indexx lda #0 ; slett lengde-teksten jsr SetPattern jsr i_Rectangle 08` .byte (WIN_TOPC*8)+3 .byte (WIN_TOPC*8)+12 .word (WIN_LEFTC*8)+70 .word (WIN_LEFTC*8)+132 ldx indexx ; faa navn lda #0 0`0 sta hiscores,x ; ingen tekst foer input LoadW r0,hiscores ; buffer-addr. -> r0 txa add r0L sta r0L bcc 31$ inc r0H 31$: LoadB r1L,0 ; ingen egen marg-rutine LoadB r1H,(WIN_TOPC*8)+4 ; linje LoadB r2L,HI_NAME_LENGTH-3 ; antall tegn LoadW r11,(WIN_LEFTC*8)+70 ; kolonne LoadW keyVector,crpressed ; ved enter jsr GetString rts m0`0 @crpressed: ; sett inn lengde i hiscore-lista lda indexx add #HI_NAME_LENGTH-2 tax lda vlength sta hiscores,x lda vlength+1 sta hiscores+1,x jsr printhiscores jsr MouseUp  L0`0 @crpressed: ; sett inn lengde i hiscore-lista lda indexx add #HI_NAME_LENGTH-2 tax lda vlength sta hiscores,x lda vlength+1 sta hiscores+1,x jsr printhiscores jsr MouseUp  LoadW keyVector,getdir  rts 0`0 @getdir: lda keyData cmp #$6b beq 10$ ; ned cmp #$69 beq 20$ ; opp cmp #$6c beq 30$ ; hoeyre cmp #$6a beq 40$ ; venstre cmp #$2b beq 50$ ; oek fart cmp #$2d beq 60$ ; senk fart rts ; ingen forandring 10$: LoadB xdir,0 LoadB ydir,4 rts 20$: LoadB xdir,0 LoadB ydir,$fc rts 30$: LoadB xdir,4 LoadB ydir,0 rts 40$: LoadB xdir,$fc LoadB ydir,0 rts 50$: lda speed cmp #1 ; laveste grense beq 65$ dec speed rts 60$: lda speed cmp #255 ; hoeyeste grense beq 65$ inc speed 65$: rts p0`0 @drawsnake @: lda #0 ; slett hale jsr SetPattern MoveW tail,r1 jsr getchain jsr drawel lda #1 ; tegn hode jsr SetPattern MoveW head,r1 jsr getchain jsr drawel rts 0`0 @drawsnake @: lda #0 ; slett hale jsr SetPattern MoveW tail,r1 jsr getchain jsr drawel lda #1 ; tegn hode jsr SetPattern MoveW head,r1 jsr getchain jsr drawel rts r0`0 ; inn: 0`0 ; inn:  @r0L : x-verdi,  @r0H : y-verdi ; ut:  @oldxpos : x-verdi,  @oldypos : y-verdi ; forandr.:  @oldxpos ,  @oldypos ,  @a ,  @x ,  @y  @drawel @: lda r0L sta oldxpos add #3 sta rb lda r0H sta oldypos add #3 sta bb jsr i_Rectangle ; tegn/slett ledd 08`oldypos: .byte 0 bb: .byte 0 oldxpos: .word 0 rb: .word 0 0`0 rts u0`0 @pri0`0 @printhiscores: jsr cleanboard LoadB counter,NUM_SCORES LoadW temp,hiscores LoadB r1H,TOPBORDER+30 10$: MoveW temp,r0 LoadW r11,LEFTBORDER+20 jsr PutString AddVW HI_NAME_LENGTH - 2,temp MoveW temp,r2 ldy #0 lda (r2),y sta r0L IncW r2 lda (r2),y sta r0H LoadW r11,LEFTBORDER+80 lda #90 ; right-justfy, skip leading zeroes, field-length 26 jsr PutDecimal AddVW 2,temp AddVB 10,r1H dec counter bne 10$ rts hiscores: ; her plasseres alt som skal lagres i hiscore-fila .byte "**********",0,1,0 .byte "**********",0,1,0 .byte "**********",0,1,0 .byte "**********",0,1,0 .byte "**********",0,1,0 .byte "**********",0,1,0 .byte "**********",0,1,0 .byte "**********",0,1,0 speed: .byte 4 ; hvor lenge mainloop skal sove endhiscores: x0`  DrawWindow: .byte NEWPATTERN,1 ; skygge .byte MOVEPENTO .word (WIN_LEFTC*8)+8 .byte (WIN_TOPC*8)+8 .byte RECTANGLETO    .word (WIN_LEFTC+WIN_WIDTHC+1)*8 - 1 .byte0`  DrawWindow: .byte NEWPATTERN,1 ; skygge .byte MOVEPENTO .word (WIN_LEFTC*8)+8 .byte (WIN_TOPC*8)+8 .byte RECTANGLETO    .word (WIN_LEFTC+WIN_WIDTHC+1)*8 - 1 .byte (WIN_TOPC+WIN_HEIGHTC+1)*8 - 1 .byte NEWPATTERN,0 ; vindusbakgrunn .byte MOVEPENTO .word WIN_LEFTC*8 .byte WIN_TOPC*8 .byte RECTANGLETO .word (WIN_LEFTC+WIN_WIDTHC)*8 - 1 .byte (WIN_TOPC+WIN_HEIGHTC)*8 - 1 .byte NEWPATTERN,1 ; vindusramme .byte FRAME_RECTO .word WIN_LEFTC*8 .byte WIN_TOPC*8 .byte MOVEPENTO ; snakeramme .word LEFTBORDER-1 .byte TOPBORDER-1 .byte FRAME_RECTO .word RIGHTBORDER+1 .byte BOTTOMBORDER+1 .byte NULL |0`0 MenuTable: .byte WIN_TOPC*8 .byte (WIN_TOPC*8)+14 .word WIN_0`0 MenuTable: .byte WIN_TOPC*8 .byte (WIN_TOPC*8)+14 .word WIN_LEFTC*8 .word (WIN_LEFTC*8)+52 .byte 2 | HORIZONTAL .word FileText .byte VERTICAL .word FileSubMenu .word GameText .byte VERTICAL .word GameSubMenu FileSubMenu: .byte (WIN_TOPC*8)+15 .byte (WIN_TOPC*8)+44 .word WIN_LEFTC*8 .word (WIN_LEFTC*8)+39 .byte 2 | VERTICAL .word NewText .byte MENU_ACTION .word DoNew .word QuitText .byte MENU_ACTION .word DoQuit GameSubMenu: .byte (WIN_TOPC*8)+15 .byte (WIN_TOPC*8)+44 .word (WIN_LEFTC*8)+20 .word (WIN_LEFTC*8)+69 .byte 2 | VERTICAL .word HiscoresText .byte MENU_ACTION .word DoHiscores .word AboutText .byte MENU_ACTION .word DoAbout FileText: .byte "file",0 NewText: .byte "new",0 QuitText: .byte "quit",0 GameText: .byte "game",0 HiscoresText: .byte "hiscores",0 AboutText: .byte "about",0 head,1024 bne 10$ LoadW head,0 10$: CmpW vlength,length ; skal hale oppdateres? bne 30$ ; ikke lang nok - vent AddVW #2,tail ; oppd0` @DoNew: jsr GotoFirstMenu jsr init jmp mainloop rts  @DoHiscores: jsr GotoFirstMenu jsr printhiscores rts  @DoAbout: jsr GotoFirstMenu jsr cleanboard jsr i_PutString 08` .word LEFTBORDER .byte TOPBORDER+20 .byte " ",24," @Snake v1.0 ",27,13 .byte " A snake-clone DA",13 .byte " Freeware",13 .byte " (c) Asbjoern Djupdal",13 .byte " Sep. 1999",13 .byte 13 .byte " ",14," Controls: ",27,13 .byte " Left: j Right: l",13 .byte " Up: i Down: k",13 .byte " Change speed: +,-",0 rts  @DoQuit: jsr GotoFirstMenu jsr RestoreColors jsr RestoreScreen LoadW r0,scorename ; save hiscore jsr DeleteFile LoadW r9,hiscoreheader LoadB r10L,0 jsr SaveFile jmp RstrAppl k0` NUM_CARDS = (WIN_HEIGHTC+1)*(WIN_WIDTHC+1) FG_BUF_SIZE = NUM_CARDS*8  @SaveScreen @: LoadW r0,#screenBuf ldx #WIN_TOPC*8 10$: jsr GetScan0` NUM_CARDS = (WIN_HEIGHTC+1)*(WIN_WIDTHC+1) FG_BUF_SIZE = NUM_CARDS*8  @SaveScreen @: LoadW r0,#screenBuf ldx #WIN_TOPC*8 10$: jsr GetScanLine AddVW #(WIN_LEFTC*8),r5 AddVW #(WIN_LEFTC*8),r6 ldy #((WIN_WIDTHC+1)*8)-1 20$: lda (r6),y jsr SaveByte bit recoverFlag bpl 30$ lda (r5),y jsr SaveByte 30$: dey cpy #$ff bne 20$ txa clc adc #8 tax cpx #(WIN_TOPC+WIN_HEIGHTC+1)*8 bcc 10$ rts l0` @RestoreScreen @: Lo0` @RestoreScreen @: LoadW r0,#screenBuf ldx #WIN_TOPC*8 10$: jsr GetScanLine AddVW #(WIN_LEFTC*8),r5 AddVW #(WIN_LEFTC*8),r6 ldy #((WIN_WIDTHC+1)*8)-1 20$: jsr GetByte sta (r6),y bit recoverFlag bpl 30$ jsr GetByte sta (r5),y 30$: dey cpy #$ff bne 20$ txa clc adc #8 tax cpx #(WIN_TOPC+WIN_HEIGHTC+1)*8 bcc 10$ rts n0` @SaveColors: LoadW r0,#colorBuf LoadW r2,#COLOR_MATRIX + (WIN_TOPC * 40) + WIN_LEFTC ldx #WIN_0` @SaveColors: LoadW r0,#colorBuf LoadW r2,#COLOR_MATRIX + (WIN_TOPC * 40) + WIN_LEFTC ldx #WIN_HEIGHTC+1 ldy #WIN_WIDTHC-1 20$: bit recoverFlag bvc 30$ lda (r2),y jsr SaveByte 30$: lda COLOR_MATRIX+40-1 sta (r2),y dey bmi 10$ ; ny linje cpx #1 bne 20$ ; nederste linje cpy #0 bne 20$ ; ikke siste byte 10$: AddVW #40,r2 ldy #WIN_WIDTHC dex bne 20$ rts o0` @RestoreColors: bit recoverFlag bvc 90$ LoadW r0,#colorBu0` @RestoreColors: bit recoverFlag bvc 90$ LoadW r0,#colorBuf LoadW r2,#COLOR_MATRIX + (WIN_TOPC * 40) + WIN_LEFTC ldx #WIN_HEIGHTC+1 ldy #WIN_WIDTHC-1 20$: jsr GetByte sta (r2),y dey bmi 10$ ; ny linje cpx #1 bne 20$ ; nederste linje cpy #0 bne 20$ ; ikke siste byte 10$: AddVW #40,r2 ldy #WIN_WIDTHC dex bne 20$ 90$: rts `p0` @SaveByte @: sty r1L ldy #0 sta (r0),y bra Finish  @GetByte @: sty r1L ldy #0 0` @SaveByte @: sty r1L ldy #0 sta (r0),y bra Finish  @GetByte @: sty r1L ldy #0 lda (r0),y Finish: inc r0L bne 90$ inc r0H 90$: ldy r1L rts r0` .ramsect recoverFlag: 0` .ramsect recoverFlag: .block 1 xdir: .block 1 ydir: .block 1 head: .block 2 tail: .block 2 length: .block 2 vlength: .block 2 ptscounter: .block 1 indexx: accum: .block 1 temp: tempL: .block 1 tempH: .block 1 counter: .block 1 array0: .block 256 array1: .block 256 array2: .block 256 array3: .block 256 screenBuf: .block FG_BUF_SIZE*2 colorBuf: .block NUM_CARDS SnakeEnd: ="r>Brle ; tegn/slett ledd 08>Brle ; tegn/slett ledd 08`oldypos: .byte 0 bb: .byte 0 oldxpos: .word 0 rb: .word 0 0`0 rts u0`0 @printhiscores: le ; tegn/slett ledd 08`oldypos: .byte 0 bb: .byte 0 oldxpos: .word 0 rb: .word 0 0`0 rts u0`0 @printhiscores: jsr cleanboard LoadB counte?snake.hdr?c PRG formatted GEOS file V1.0AWrite Image V2.0geoWrite V1.1H0` ;  @snake header ;  @(c) Asbjoern Djupdal Sep. 1999 .if Pass1 .noeqin .include geosSym .eqin .endif .header .word 0 .byte 3 .byte 21 @ .byte $80 | USR .byte DESK_ACC .byte SEQUENTIAL .word SnakeStart .word SnakeEnd .word SnakeStart .byte "Snake V1.0",0,0,0,$00 .byte "Asbjoern Djupdal ",0 .block 160-117 .byte "A snake clone for GEOS.",0 .endh @h]]UQՙ]QU]yy`` DeleteFile Loa]]UQՙ]QU]yy`` DeleteFile LoadW r9,hiscoreheader LoadB r10L,0 jsr SaveFile jmp RstrAppl k0` NUM_CARDS = (WIN_HEIGHTC+1)*(WIN_WIDTHC+1) FG_BUF_SIZE = NUM_CARDS*8? snakehi.hdr? c PRG formatted GEOS file V1.0AWrite Image V2.0geoWrite V2.1  ....  9 < <` " . r " `(@1ʎsAڢ9 V&H0X ;  @snake hiscore header ;  @(c) Asbjoern Djupdal Sep. 1999 .if Pass1 .noeqin .include geosSym .eqin .endif scorename: .byte "snakescores",0 hiscoreheader: .header .word scorename .byte 3 .byte 21 @ .byte $80 | USR .byte APPL_DATA .byte SEQUENTIAL .word hiscores .word endhiscores .word 0 .byte "SnakeScores V1.0",0,0,0,$00 .byte " ",0 .block 160-117 .endh @i]]UQՙ]QU]]]UQՙ]QU] hiscoreheader LoadB r10L,0 jsr SaveFile jmp RstrAppl k0` NUM_CARDS = (WIN_HEIGHTC+1)*(WIN_WIDTHC+1) FG_BUF_SIZE = NUM_CARDS*8  @SaveScreen @:?snake.lnk?c PRG formatted GEOS file V1.0AWrite Image V2.0geoWrite V1.10 ;  @s @na @ke linkfil ;  @(c) Asbjoern Djupdal Sep. 1999 .output snake .header snake.hdr.rel .seq .psect $1000 snake.s.rel snakehi.hdr.rel hiscoreheader: .header .word scorename .byte 3 .byte 21 @ ?snake.readme?c PRG formatted GEOS file V1.0AWrite Image V2.0geoWrite V2.1  ...݅ ( >1 59 ..  9 < <` " . r " `(@1ʎsAڢ9 V& Snake V1.0 (C) Asbjoern Djupdal Sep. 1999 This is a desk accessory game for GEOS. It has been tested with GEOS 64 2.0 and GEOS 128 2.0 (40 column). Snake is freeware, so you may freely copy and use it. I don't know of any bugs, but please don't blame me if it crashes and destroys unsaved or saved data. How to use: The objective of the game is to get as big as possible. You grow (a random length) every time you eat a black square. If you hit the walls or crashes in yourself, you die! It is not possible to stop moving. Keys: Left: j Right: l Up: i Down: k Increase speed: + Decrease speed: - When started, the game searches for a file called snakescores where the hiscore table and the snake's speed is stored. If it is not found, one will be created. Asbjoern Djupdal djupdal@stud.ntnu.no (should be valid to around 2002 - 2003)