track ti86 includes; rename to .z80
[wormy.git] / worm.asm
diff --git a/worm.asm b/worm.asm
deleted file mode 100644 (file)
index d8f61e0..0000000
--- a/worm.asm
+++ /dev/null
@@ -1,2352 +0,0 @@
-; Title                      : Worm
-; Version                    : 0.92
-; Release Date               : soon (I hope)
-; Filename                   : worm.86p (3404)
-; Author(s)                  : Shiar
-; Email Address              : shiar@mailroom.com
-; ICQ UIN                    : #43840958
-; Web Page                   : www.games3.net/shiar
-; Description                : ruling multiplayer game for 86 (most like Nibbles)
-; Where to get this game     : games3.net/shiar (home of Worm)
-; Other games by author(s)   : Shiar: Nemesis beta
-; Additional Credits to      : Matthew Shepcar (wrote original Peaworm, end'98)
-;                              Jonah Cohen (wrote some parts of worm)
-
-;-----------------------------
-;----------- TO-DO -----------
-;-----------------------------
-
-;       Shiar 3.III.00
-
-;Feel like doing something? (name indicates who's working on it)
-;  * linkplay
-;  * singleplay ending
-;  * titlescreen
-;  * make linkplay available for all gametypes (not just deathmatch)
-;  * two worms collide with heads -> both should die
-;  * game types:
-;1)  * ctf: take enemy flag (right-bottom) and return to your flag (left-top)
-;1)  * domination?: take control points by running over them and hold them
-;1)* sprites for picks instead of blocks
-
-;1) Working on a new pickup-system allowing more than one "food" and different pickup-handling
-
-#include "TI86.inc"
-
-;-----------------------------
-;------- program start -------
-;-----------------------------
-
-.org _asm_exec_ram
-start:
-  nop
-  jp Start
-  .dw 1
-  .dw WormMsg
-  .dw WormIcon
-
-WormIcon:
-  .db 9,2
-  .db %10010111,%01101111
-  .db %10110101,%01001011
-  .db %11110111,%01001001
-  .db %00000011,%10000000
-  .db %00000001,%11100000
-  .db %00111000,%11111000
-  .db %01111110,%00111111
-  .db %11101111,%00001111
-  .db %11000011,%10000000
-
-Start:
-  ld  (SpSave),sp
-  call _runIndicOff
-  call _flushAllMenus
-  call _clrLCD
-  res 2,(iy+13) ;appAutoScroll
-
-  ld  a,r
-  ld  (Seed),a
-
-;-----------------------------
-;----- build trig tables -----
-;-----------------------------
-
-  ld  hl,TrigPrecalc
-  ld  de,SinCosTable
-  push de                        ; >> 1
-  ld  bc,65
-  ldir
-  dec hl
-  ld  b,63
-MirrorSineWave:
-  dec hl
-  ld  a,(hl)
-  ld  (de),a
-  inc de
-  djnz MirrorSineWave
-  pop hl                         ; << 0k
-  ld  b,128+64
-NegativeSineWave:
-  xor a
-  sub (hl)
-  ld  (de),a
-  inc hl
-  inc de
-  djnz NegativeSineWave
-
-;-----------------------------
-;---------- menu -------------
-;-----------------------------
-
-DisplayMenu:
-  ld  a,2
-  ld  (nrworms),a
-gomainMenu:
-  call _clrWindow
-  ld  hl,txtWelcome
-  call _puts
-  ld  de,$0205
-  ld  (_curRow),de
-  call _puts ;txtOptions
-  dec e ;$0204
-  ld  (_curRow),de
-  ld  hl,(CURtxtGame)
-  call _puts
-
-  xor a
-mainMenu:
-  call menucall
-  jr  nz,notselect
-select:
-  ld  a,b
-  or  a
-  jr  nz,gooptionsMenu
-  jp  LetsGetThisPartyOn
-notselect
-  cp  K_EXIT
-  jp  z,ExitNoStats
-  cp  K_RIGHT
-  ld  a,b
-  jr  nz,mainMenu
-  or  a
-  jr  z,Variation
-
-gooptionsMenu:
-  call _clrWindow
-  ld  hl,txtWelcome
-  call _puts
-  ld  hl,txtLevel
-  ld  de,$0205
-  ld  (_curRow),de
-  call _puts ;txtLevel
-  dec e ;$0204
-  ld  (_curRow),de
-  call _puts ;txtWorms
-  ld  a,(nrworms)
-  add a,'0'
-  call _putc
-  xor a
-optionsMenu:
-  call menucall
-  jr  nz,notopselect
-opselect:
-  ld  a,b
-  or  a
-  jr  nz,changelevel
-changeworms:
-  ld  hl,nrworms
-  inc (hl)
-  ld  a,4
-  cp  (hl)
-  jr  nc,gooptionsMenu
-  ld  (hl),2
-  jr  gooptionsMenu
-changelevel:
-  jr  optionsMenu
-
-notopselect:
-  cp  K_EXIT
-  jr  z,gomainMenu
-  ld  a,b
-  jr  optionsMenu
-
-Variation:
-  ld  a,0
-Gametype =$-1
-  ld  hl,txtGame2
-NEXTtxtGame =$-2
-  inc a
-  and 7 ;mod 8
-  jr  nz,okilydokily
-  ld  hl,txtGame
-okilydokily:
-  ld  (Gametype),a
-  ld  de,$0204
-  ld  (_curRow),de
-  ld  (CURtxtGame),hl
-  call _puts
-  ld  (NEXTtxtGame),hl
-  ld  a,b
-  jp  mainMenu
-
-menucall:
-  push af
-  ld  hl,$0004
-  ld  (_curRow),hl
-  ld  a,' '
-  call _putc
-  ld  hl,$0005
-  ld  (_curRow),hl
-  call _putc
-  pop af
-  push af
-  ld  h,0
-  add a,4
-  ld  l,a
-  ld  (_curRow),hl
-  ld  a,'*'
-  call _putc
-  pop af
-  ld  b,a
-menukeys:
-  halt \ halt
-  call _getcsc
-  or  a
-  jr  z,menukeys
-  cp  K_UP
-  jr  nz,notup
-updown:
-  ld  a,b
-  xor 1
-  ld  b,a
-  inc a ;nz
-  ret
-notup:
-  cp  K_DOWN
-  jr  z,updown
-  cp  K_ENTER
-  ret z
-  cp  K_SECOND
-  ret ;z=select
-
-;-----------------------------
-;-------- start game ---------
-;-----------------------------
-
-LetsGetThisPartyOn:
-  ld  hl,Gametype
-  ld  a,(hl)
-  add a,a
-  add a,(hl)
-  ld  e,a
-  ld  d,0
-  ld  hl,gamesdata
-  add hl,de
-
-  ld  a,(hl)
-  push af
-  and _datasingl
-  jr  z,notsingle
-  ld  a,1
-  ld  (nrworms),a
-notsingle:
-  pop af
-  ld  (gameCar),a
-  push af
-
-  and _datascore
-  ld  de,$FF64 ;virt.infinate
-  jr  z,setscorelimit
-  ld  d,0 ;de=100
-setscorelimit:
-  ld  (scorelimit),de
-
-  inc hl
-  call _ldHLind
-  pop af
-  push hl
-  and _datalink
-  jr  z,GameOver
-
-linkmatch:
-  call _clrWindow
-
-
-; in  a,(7)
-; and %11
-; cp  %11
-  ld  a,WormVersion
-; jr  nz,host
-  call send
-  jr  c,host
-
-client:
-  ld  hl,txtReceive
-  call _puts
-  call receive
-  cp  WormVersion
-  ret nz
-  jr  multiplayer
-
-host:
-  ld  hl,txtWaiting
-  call _puts
-  call receive
-  cp  WormVersion
-  ret nz
-  call send
-  ld  hl,SwapPos
-  ld  (hl),$f6
-
-multiplayer:
-  ld  a,2
-  ld  (nrworms),a
-  ld  de,LevelsDM
-
-;-----------------------------
-;--------- game over ---------
-;-----------------------------
-
-GameOver:
-  call _clrLCD
-  ld  hl,0
-  ld  (worm1+died),hl
-;+died=0 \ +score1=0
-  ld  (worm2+died),hl
-  ld  (worm3+died),hl
-  ld  (worm4+died),hl
-  inc h
-  ld  (worm1+score+1),hl
-;+score2=0 \ +delay=1
-  ld  (worm2+score+1),hl
-  ld  (worm3+score+1),hl
-  ld  (worm4+score+1),hl
-  ld  a,l
-  ld  (Level),a
-  ld  hl,worm1set+4
-  ld  de,worm1+lives
-  call _MOV5B ;9xld(de),(hl)
-  call _mov9b
-  ld  hl,worm2set+4
-  ld  de,worm2+lives
-  call _MOV5B
-  call _mov9b
-  ld  hl,worm3set+4
-  ld  de,worm3+lives
-  call _MOV5B
-  call _mov9b
-  ld  hl,worm4set+4
-  ld  de,worm4+lives
-  call _MOV5B
-  call _mov9b
-  pop de
-
-StartLevel:
-  ex  de,hl
-  ld  de,Left
-  ldi
-  ld  de,Speed
-  ldi
-  ld  a,(hl)
-  ld  (worm1+grow),a
-  ld  (worm2+grow),a
-  ld  (worm3+grow),a
-  ld  (worm4+grow),a
-  ld  (beginsize),a
-  inc hl
-
-  ld  a,(hl)
-  inc hl
-  ld  (nrballs),a
-  or  a
-  jr  z,toobad_noballs
-  ld  de,ballpos
-  ldi
-  ldi
-toobad_noballs:
-
-#ifdef 0
-  ld  a,(gameCar)
-  and _datahunt
-  jr  z,nohunter
-  ld  a,huntersize
-  ld  (worm2+grow),a
-nohunter:
-#endif
-
-  ex  de,hl
-  ld  (thislevel),de
-  push de
-  ld  hl,worm1set
-  ld  de,worm1+head
-  call _MOV4B
-  ld  hl,worm2set
-  ld  de,worm2+head
-  call _MOV4B
-  ld  hl,worm3set
-  ld  de,worm3+head
-  call _MOV4B
-  ld  hl,worm4set
-  ld  de,worm4+head
-  call _MOV4B
-  pop de
-
-  ld  hl,worm1
-  ld  a,(gameCar)
-  and _datanextl
-  ld  b,1
-  jr  nz,worminit
-  ld  b,4
-worminit:
-  push bc                        ; >> 1
-  ld  a,(de)
-  ld  (hl),a   ;d
-  inc de
-  inc hl
-  ld  a,SinCosTable/256
-  ld  (hl),a
-  inc hl
-
-  ld  a,(de)
-  ld  (hl),a   ;y
-  inc de
-  inc hl
-  ld  a,(de)
-  ld  (hl),a   ;x
-  inc de
-  inc hl
-
-  xor a
-  ld  (hl),a   ;y2
-  inc hl
-  ld  (hl),a   ;x2
-
-  ld  bc,(worm2-worm1)-5
-  add hl,bc
-  pop bc                         ; << 0k
-  djnz worminit
-
-;-------- draw level ---------
-
-  ld  a,(de)
-  inc de
-  sub 128
-  ld  (FieldWidth),a
-  ld  a,(de)
-  inc de
-  sub 57
-  ld  (FieldHeight),a
-  add a,57-5
-  push de                        ; >> levelp
-  ld  l,a
-  ld  h,0
-  add hl,hl
-  add hl,hl
-  add hl,hl
-  add hl,hl
-  add hl,hl
-  ex  de,hl
-
-  ld  hl,ScrBuffer
-  push hl                        ; >> 1
-  push de                        ; >> 2
-  ld  de,ScrBuffer+1
-  ld  bc,63
-  ld  (hl),%11111111
-  ldir
-  inc hl
-  ld  (hl),%11000000
-  inc hl
-  ld  b,31
-ClearLine:
-  ld  (hl),c
-  inc hl
-  djnz ClearLine
-  push hl                        ; >> 3
-
-  ld  a,(FieldWidth)
-  add a,126
-  push af                        ; >> 4
-  and %11111000
-  rra
-  rra
-  rra
-  ld  l,a
-  ld  h,0
-  add hl,de
-  pop af                         ; << 3
-  and %00000111
-  ld  b,a
-  ld  c,0
-  ld  a,%11000000
-  jr  z,NoVertShift
-VertShift:
-  rra
-  rr  c
-  djnz VertShift
-NoVertShift:
-  ld  (hl),a
-  inc hl
-  ld  (hl),c
-
-  ex  de,hl
-  pop de                         ; << 2
-  pop bc                         ; << 1
-  ldir
-  pop hl                         ; << 0k
-  ld  c,64
-  ldir
-
-;-draw lines-
-
-  pop hl                         ; << levelp
-  ld  a,(hl)
-  inc hl
-  or  a
-  jr  z,NoLines
-DrawLines:
-  push af                        ; >> 1
-  call loaddrawdata
-  push hl                        ; >> 2
-  ld  l,(hl)
-  ld  h,a
-  call Line
-  inc d
-  inc h
-  call Line
-  inc e
-  inc l
-  call Line
-  dec d
-  dec h
-  call Line
-  pop hl                         ; << 1
-  inc hl
-  pop af                         ; << 0k
-  dec a
-  jr  nz,DrawLines
-NoLines:
-
-  ld  a,(hl)
-  inc hl
-  or  a
-  jr  z,noboxes
-drawboxes:
-  push af
-  call loaddrawdata
-  push hl
-  ld  l,(hl)
-  ld  h,a
-  call drawbox
-  pop hl
-  inc hl
-  pop af
-  dec a
-  jr  nz,drawboxes
-noboxes:
-
-;-----------------------------
-
-  push hl                        ; >> levelp new
-  call showstats
-  ld  a,(gameCar)
-  and _datafood
-  jr  z,nofood
-  call NewPea
-  call DrawPea
-nofood:
-  ld  bc,(worm1+pos)
-  call DisplayField
-  ld  hl,$FDE0
-  ld  de,$FDE1
-  ld  (hl),%11111111
-  ld  bc,$BF
-  ldir
-  ld  hl,4+(txtposReady*256)
-  ld  (_curRow),hl
-  set 3,(iy+5)
-  ld  hl,txtReady
-  call _puts
-  res 3,(iy+5)
-
-  ld  a,0
-gameCar =$-1
-  and _datalink
-  jr  z,SwapPos ;no link
-  xor a
-  ld  (worm2+input),a
-  ld  (worm2+left),a
-  ld  (Speed),a
-
-SwapPos: ;$18 xx -> $F6 xx
-  jr  initfinished
-  inc a
-  ld  (worm2+left),a
-  ld  hl,(worm1+pos)
-  ld  de,(worm2+pos)
-  ld  (worm2+pos),hl
-  ld  (worm1+pos),de
-  ld  a,(worm1+heading)
-  ld  b,a
-  ld  a,(worm2+heading)
-  ld  (worm1+heading),a
-  ld  a,b
-  ld  (worm2+heading),a
-initfinished:
-
-  ld  b,0
-ReadyDelay:
-  halt
-  djnz ReadyDelay
-
-;-----------------------------
-;----------- LOOP ------------
-;-----------------------------
-
-GameLoop:
-  ld  bc,(worm1+pos)
-  call DisplayField
-
-  ld  a,1
-flashtime =$-1
-  dec a
-  jr  z,noflash
-  ld  (flashtime),a
-  ld  hl,$fc00+(16*7)
-screeninvertloop:
-  ld  a,(hl)
-  cpl
-  ld  (hl),a
-  inc hl
-  xor a
-  cp  h
-  jr  nz,screeninvertloop
-noflash:
-
-  ld  a,0
-Speed =$-1
-  or  a
-  jr  z,NoDelay
-Delay:
-  halt
-  dec a
-  jr  nz,Delay
-NoDelay:
-
-  call handlethatneatlittleball
-
-  ld  ix,worm1
-  ld  a,(nrworms)
-  ld  b,a
-handleworms:
-  push bc
-  call HandleWorm
-  ld  bc,worm2-worm1
-  add ix,bc
-  pop bc
-  djnz handleworms
-
-;-----------------------------
-;---------- keys -------------
-;-----------------------------
-
-HandleKeys:
-  ld  a,%10111111
-  out (1),a
-  in  a,(1)
-  rla
-  jr  c,NotPaused
-  ld  bc,$0103
-  out (c),b
-  halt
-  ld  b,11
-  out (c),b
-
-NotPaused:
-  rla
-  jp  c,GameLoop
-  jr  Exit ;&&
-
-WormDead:
-  ld  a,2
-  ld  (flashtime),a
-
-  ld  h,(ix+tail+1)
-  ld  l,(ix+tail)
-  ld  d,(ix+head+1)
-  ld  e,(ix+head)
-  jr  DoesWormTailEqualsWormHead ;chk4 size=0
-removewormloop:
-  ld  c,(hl)
-  inc hl
-  ld  b,(hl)
-  inc hl
-  res resbit,h
-  push hl
-  call res4pixels
-  pop hl
-  inc (ix+grow)
-DoesWormTailEqualsWormHead:
-  call _cphlde
-  jr  nz,removewormloop
-
-  ld  a,(gameCar)
-  and _datasingl
-  jr  nz,safewormsizedone
-  ld  a,0
-beginsize =$-1
-  ld  (ix+grow),a
-safewormsizedone:
-
-  ;de=ix+head
-  ld  (ix+tail+1),d
-  ld  (ix+tail),e
-  ld  a,50
-  ld  (ix+delay),a
-
-thislevel =$+1
-  ld  de,0
-  ld  a,(de)
-  inc de
-  ld  (ix+heading),a
-  ld  a,(de)
-  ld  (ix+pos),a
-  inc de
-  ld  a,(de)
-  ld  (ix+pos+1),a
-
-  inc (ix+died)
-  dec (ix+lives)
-  push af
-  ld  de,10
-  call DecScore
-  pop af
-  ret nz ;HandleWorm done
-  ld  a,(gameCar)
-  and _datalivel
-  ret z
-
-Exit:
-  ld  sp,0 ;pop all
-SpSave = $-2
-  call _clrWindow
-  ld  hl,txtGO
-  call _puts
-  ld  hl,txtGame
-CURtxtGame =$-2
-  call _puts
-  ld  de,0002
-  ld  (_curRow),de
-  call showLevel
-  ld  de,$0B03
-  ld  (_curRow),de
-  ld  hl,txtDied
-  call _puts
-  call _puts ;txtScore
-  xor a
-  ld  (_curCol),a
-
-  ld  b,2
-nrworms =$-1
-  ld  hl,worm1+died
-displayWormStats:
-  push bc
-  push hl
-
-  ld  bc,input-died
-  add hl,bc ;+input
-  xor a
-  cp  (hl)
-  jr  nz,NoLinkIndic
-  ld  b,7
-  inc hl ;+left
-  cp  (hl)
-  jr  z,hostLinkIndic
-  dec b
-hostLinkIndic:
-  ld  a,8
-  ld  (_curCol),a
-  ld  a,b
-  call _putc
-  xor a
-  ld  (_curCol),a
-  dec hl
-NoLinkIndic:
-  inc hl
-  inc hl
-  inc hl ;+name
-  call _puts
-
-  pop hl
-  push hl
-  ld  a,13
-  ld  (_curCol),a
-  ld  a,(hl) ;worm+died
-  push hl
-  call showA
-  pop hl
-
-  ld  a,16
-  ld  (_curCol),a
-  inc hl ;worm+score
-  call _ldHLind ;ld hl,(hl)
-  call showHL ;worm+score
-
-  pop hl
-  ld  bc,worm2-worm1
-  add hl,bc
-  pop bc
-  djnz displayWormStats
-
-  ld  a,(gameCar)
-  and _datasingl
-  jr  z,hiscorecheckdone
-checkhiscore:
-  ld  de,(worm1+score)
-HiScore =$+1
-  ld  hl,0
-  ld  a,e
-  cp  l
-  jr  c,NotNewHigh
-  ld  a,d
-  cp  h
-  jr  c,NotNewHigh
-  ld  (HiScore),de
-  ex  de,hl ;disp.new hiscore
-NotNewHigh:
-  ex  de,hl
-  ld  hl,txthiscore
-  call _puts
-  ex  de,hl
-  call showHL
-hiscorecheckdone:
-
-waitkey:
-  halt
-  halt
-  call _getcsc
-  cp  K_ENTER
-  jp  z,DisplayMenu
-;  cp  K_EXIT
-  jr  nz,waitkey
-
-;x123456789012345678901
-;1----- GAME OVER -----
-;2Multiplayer
-;3Level 01
-;4           Died Score:
-;5NameName     03 00070
-;6Worm#02 @    05 00120
-;7Worm#03      15 00030
-;8Snaky   @    00 04820
-
-ExitNoStats:
-  ld  hl,_asapvar
-  rst 20h ;_ABS_MOV10TOOP1
-  rst 10h ;_FINDSYM
-  call _swapt_ ;_ex_ahl_bde
-  ld  de,4
-  add hl,de
-  adc a,0
-  call _SET_ABS_DEST_ADDR
-
-  xor a
-  ld  hl,start
-  call _SET_ABS_SRC_ADDR
-  ld  hl,end-start
-  call _SET_MM_NUM_BYTES
-  call _MM_LDIR
-
-;  xor a
-;  ld  (_asapvar+1),a
-  res 4,(iy+9)
-  set 2,(iy+13)
-  jp  _clrWindow
-
-;-----------------------------
-;----------- worm ------------
-;-----------------------------
-
-inlink:
-  ld  a,0
-sendbyte =$-1
-  ld  b,(ix+left)
-  dec b
-  jr  z,receivefirst
-  call send
-  call receive
-  ld  l,a
-  ret
-receivefirst:
-  push af
-  call receive
-  ld   l,a
-  pop  af
-  push hl
-  call send
-  pop  hl
-  ret
-
-inkeys: ;use jp not call!
-  out (1),a
-  in  a,(1)
-  ld  b,a
-  and (ix+right)
-  jr  z,notright
-  ld  a,l
-  add a,8
-  ld  l,a
-notright:
-  ld  a,b
-  and (ix+left)
-  jr  z,donediddelydone
-  ld  a,l
-  sub 8
-  ld  l,a
-  jr  donediddelydone
-
-;------- handle worm ---------
-
-HandleWorm:
-  dec (ix+delay)
-  ret nz
-  inc (ix+delay)
-  ld  l,(ix+heading)
-  ld  a,(ix+input)
-  or  a
-  jr  nz,inkeys
-  call inlink
-donediddelydone:
-  ld  a,l
-  ld  (sendbyte),a
-  ld  (ix+heading),l
-  ld  h,(ix+heading+1)
-
-  ld  c,(ix+pos)
-  ld  b,(ix+pos+1)
-  ld  e,(ix+pos2)
-  ld  d,(ix+pos2+1)
-
-;-------- move worm ----------
-
-Wormmove:
-  push bc                        ; >> pos
-  ld  a,(hl)
-  add a,a
-  add a,d
-  ld  d,a
-  bit 7,(hl)
-  jr  z,notnegX
-  dec b
-notnegX:
-  jr  nc,notmoveX
-  inc b
-notmoveX:
-  ld  a,l
-  add a,$40
-  ld  l,a
-  ld  a,(hl)
-  add a,a
-  add a,e
-  ld  e,a
-  bit 7,(hl)
-  jr  z,notnegY
-  dec c
-notnegY:
-  jr  nc,notmoveY
-  inc c
-notmoveY: ;bc=newpos
-  ld  (ix+pos2),e
-  ld  (ix+pos2+1),d
-  ld  (ix+pos),c
-  ld  (ix+pos+1),b
-
-;-check-
-  pop hl                         ; << pos (old)
-  ld  a,h
-  sub b
-  and 1
-  ld  h,a
-  ld  a,l
-  sub c
-  and 1
-  add a,h
-  ld  d,4
-  jr  z,GotFour
-  xor 3
-  ld  d,a
-GotFour:
-  call chk4pixels
-  rl  d
-  jp  nc,Drawworm
-
-;--------- worm hit ----------
-
-Hitworm:
-  ld  a,(gameCar)
-  ld  h,a
-  and _datafood
-  jp  z,WormDead
-  ld  a,h
-  and _datahunt
-  call nz,checkhitotherworm
-
-  ld  hl,0
-PeaY =$-2
-PeaX =$-1
-  ld  a,b
-  sub h
-  inc a
-  cp  4
-  jp  nc,WormDead
-  ld  a,c
-  sub l
-  inc a
-  cp  4
-  jp  nc,WormDead
-  call DrawPea
-  ld  a,(ix+grow)
-  add a,15
-  ld  (ix+grow),a
-  call NewPea
-  ld  hl,Left
-  dec (hl)
-  push af
-  ld  de,10
-  call IncScore
-  pop af
-  jr  nz,still_alive_not_dead
-  ld  a,(gameCar)
-  and _datafoodl
-  jr  z,still_alive_not_dead
-  ld  hl,Level
-  ld  a,(hl)
-  inc (hl)
-  pop hl                         ; << call
-  pop hl                         ; << call
-  pop de                         ; << levelp new
-  cp  NUM_LEVELS
-  jp  z,Exit
-  ld  a,(gameCar)
-  and _datanextl
-  jp  nz,StartLevel
-  jp  Exit
-
-;-----------------------------
-
-checkhitotherworm:
-  .db $dd,$7d ;ld a,lx
-  cp  worm2&255
-  ret nz
-ThisIsJustASillyUselessLabel:
-  ld  hl,(worm1+tail)
-  ld  de,(worm1+head)
-nextotherwormbit:
-  ld  a,c
-  sub (hl)
-  inc hl
-  inc a
-  cp  4
-  jr  nc,nothit1 ;no
-  ld  a,b
-  sub (hl)
-  inc a
-  cp  4
-  jr  c,otherwormHIT ;yes
-nothit1:
-  inc hl
-  res resbit,h
-  call _cphlde
-  jr  nz,nextotherwormbit
-  ret
-
-checkhitlapline:
-  ld  a,63
-  sub b
-  jr  z,nextlaphalf
-  inc a
-  ret nz
-nextlaphalf:
-  ld  a,c
-  and 32 ;y>=32?
-  jr  nz,nolap
-  cp  (ix+reserv)
-  jr  z,nolap
-  push bc
-  ld  de,20
-  call IncScore
-  pop bc
-  xor a
-nolap:
-  ld  (ix+reserv),a
-  ret
-
-otherwormHIT:
-  push ix
-  ld  de,10
-  call IncScore
-  ld  ix,worm1
-  call WormDead
-  pop ix
-  pop bc
-still_alive_not_dead:
-
-;-------- draw worm ----------
-
-Drawworm:
-  ld  a,(gameCar)
-  and _datahunt
-  call nz,HuntingTimeScore
-
-  ld  c,(ix+pos)
-  ld  b,(ix+pos+1)
-
-  ld  a,(gameCar)
-  and _datalaps
-  call nz,checkhitlapline
-
-  ld  l,(ix+head)
-  ld  h,(ix+head+1)
-  ld  (hl),c
-  inc hl
-  ld  (hl),b
-  inc hl
-  res resbit,h
-  ld  (ix+head),l
-  ld  (ix+head+1),h
-
-  call set4pixels
-
-  ld  a,(ix+grow)
-  dec a
-  jr  z,removetail
-  ld  (ix+grow),a
-  ret
-
-removetail:
-  ld  l,(ix+tail)
-  ld  h,(ix+tail+1)
-  ld  c,(hl)
-  inc hl
-  ld  b,(hl)
-  inc hl
-  res resbit,h
-  ld  (ix+tail),l
-  ld  (ix+tail+1),h
-
-res4pixels:
-  call ResPixel
-  inc b
-  call ResPixel
-  inc c
-  call ResPixel
-  dec b
-ResPixel:
-  call FindPixel
-  cpl
-  and (hl)
-  ld  (hl),a
-  ret
-
-;-----------------------------
-;---------- ball -------------
-;-----------------------------
-
-handlethatneatlittleball:
-  ld  a,0
-nrballs =$-1
-  or  a
-  ret z
-ballpos =$+1
-  ld  bc,$0503
-  call res4pixels
-  dec c
-  ld  e,b
-ballxmove:
-  inc b ;=%000100 dec=%000101
-  call checkballhit
-  jr  z,ballxdone
-  ld  b,e
-  ld  hl,ballxmove
-  call letsmovetheotherway
-ballxdone:
-  ld  e,c
-ballymove:
-  inc c ;=%001100 dec=%001101
-  call checkballhit
-  jr  z,balldone
-  ld  c,e
-  ld  hl,ballymove
-  call letsmovetheotherway
-balldone:
-  ld  (ballpos),bc
-  jp  set4pixels
-
-letsmovetheotherway:
-  ld  a,1
-  xor (hl)
-  ld  (hl),a
-  ret
-
-checkballhit:
-  ld  d,0
-  call chk4pixels
-  xor a
-  cp  d
-  ret
-
-;-----------------------------
-;----------- procs -----------
-;-----------------------------
-
-NewPea:
-;random routine
-  ld hl,0
-  ld de,12345
-Seed =$-2
-  ld a,7921&255
-  ld bc,$1000+(7921/256)
-domult16:
-  add hl,hl
-  rla
-  rl  c
-  jr  nc,noadd16
-  add hl,de
-noadd16:
-  djnz domult16
-  inc hl
-  ld  (Seed),hl ;seed=(seed*7921+1)\65536
-
-  ld  a,(FieldWidth)
-  add a,123
-  cp  h
-  jr  c,NewPea
-  inc h
-  inc h
-  ld a,(FieldHeight)
-  add a,51
-  cp  l
-  jr  c,NewPea
-  inc l
-  inc l
-  ld  (PeaY),hl
-  ld  d,2 ;don't draw
-  push hl
-  call CheckPea
-  pop hl
-  dec d
-  jr  z,NewPea
-
-DrawPea: ;hl=(PeaY)
-  ld  d,0 ;draw
-CheckPea:
-  ld  b,h
-  ld  c,l
-  call PeaPixel
-  inc c
-  call PeaPixel
-  inc b
-  call PeaPixel
-  dec c
-PeaPixel:
-  push de
-  call FindPixel
-  pop de
-  ld  e,a ;>>
-  ld  a,d
-  or  a
-  ld  a,e ;<<
-  jr  z,DrawPeaPixel ;d=0:draw
-  and (hl) ;pixel?
-  ret z
-  ld  d,1 ;d=1:yes 2:no
-  ret
-DrawPeaPixel:
-  xor (hl) ;change pixel
-  ld  (hl),a
-  ret
-
-;-------- pixelprocs ---------
-
-set4pixels:
-  call SetPixel
-  inc b
-  call SetPixel
-  inc c
-  call SetPixel
-  dec b
-SetPixel: ;at bc
-  call FindPixel
-  or  (hl)
-  ld  (hl),a
-  ret
-
-chk4pixels: ;&&
-  call CheckPixel
-  inc b
-  call CheckPixel
-  inc c
-  call CheckPixel
-  dec b
-  call CheckPixel
-  dec c
-  ret
-CheckPixel: ;at bc in d
-  call FindPixel
-  and (hl)
-  ret z
-  dec d
-  ret
-
-;CLEM's FIND_PIXEL (131 cycles; 28 bytes)
-;            (b,c) to hl:a; destroyes: -)
-
-FindPixel:
-  ld  h,ScrBuffer/$800
-  ld  a,c
-  add a,a
-  add a,a
-  ld  l,a    ;hl=4*y + offset/8
-  ld  a,b
-  rra
-  add hl,hl
-  rra
-  add hl,hl
-  add hl,hl  ;hl=32*y + offset
-  rra        ;a=x/8
-  or  l
-  ld  l,a
-  ld  a,b
-  and 7
-  cpl
-  rlca
-  rlca
-  rlca
-  ld  (FP_Bit),a
-  xor a
-FP_Bit =$+1
-  set 0,a
-  ret
-
-;----------- score -----------
-
-HuntingTimeScore:
-  .db $dd,$7d ;ld a,lx
-  cp  worm2&255
-  ret z ;=worm#2
-  dec (ix+reserv)
-  ret nz
-  ld  de,10
-
-IncScore:
-  ld  h,(ix+score+1)
-  ld  l,(ix+score)
-  add hl,de
-  jr  scorecommon
-DecScore: ;&&&
-  ld  h,(ix+score+1)
-  ld  l,(ix+score)
-  or  a
-  sbc hl,de
-  ret c
-scorecommon:
-  ld  (ix+score+1),h
-  ld  (ix+score),l
-  ld  de,0
-scorelimit =$-2
-  call _cphlde
-  jp  nc,Exit
-
-showstats:
-  push ix
-  ld  h,0
-  ld  l,h
-  ld  (_penCol),hl
-  ld  a,(nrworms)
-  ld  b,a
-  ld  ix,worm1
-  ld  a,(gameCar)
-  and _datanextl
-  jr  nz,showstatsS
-showstatloop:
-  push bc
-  call showstat
-  ld  de,worm2-worm1
-  add ix,de
-  ld  hl,_penCol
-  ld  a,(hl)
-  add a,10
-  ld  (hl),a
-  pop bc
-  djnz showstatloop
-  pop ix
-  ret
-
-showstat:
-  ld  a,(gameCar)
-  and _datalivel
-  jr  nz,showlives
-showscore:
-  ld  h,(ix+score+1)
-  ld  l,(ix+score)
-  call _D_HL_DECI
-  jr __vputs
-showlives:
-  ld  a,(ix+lives)
-  add a,'0'
-__vputmap:
-  push ix
-  call _vputmap
-  pop ix
-  ret
-
-showstatsS:
-  ld  hl,txtLevel
-  call __vputs
-  ld  a,(Level)
-  cp  10
-  jr  c,tilllevel9
-  ld  l,a
-  ld  h,0
-  call _divHLby10
-  push af
-  ld  a,l
-  add a,'0'
-  call __vputmap
-  pop af
-tilllevel9:
-  add a,'0'
-  call __vputmap
-
-  ld  a,98
-  ld  (_penCol),a
-  call showscore
-  ld  a,123
-  ld  (_penCol),a
-  call showlives
-  ld  a,(gameCar)
-  and _datafoodl
-  pop ix
-  ret z
-showleft:
-  ld  a,31
-  ld  (_penCol),a
-  ld  a,0
-Left =$-1
-  push af
-  call _divAby10
-  add a,'0'
-  call __vputmap
-  pop af
-  add a,'0'
-  call __vputmap
-  ld  hl,txtLeft
-__vputs:
-  push ix
-  call _vputs
-  pop ix
-  ret
-
-showLevel:
-  ld  hl,txtLevel
-  call _puts
-  ld  a,(Level)
-showA:
-  cp  10
-  jr  c,LevelBelowTen
-  ld  l,a
-  ld  h,0
-  call _divHLby10
-  push af
-  ld  a,l
-  add a,'0'
-  call _putc
-  pop af
-LevelBelowTen:
-  add a,'0'
-  jp  _putc
-
-showHL:
-  call _D_HL_DECI
-  jp  _puts
-
-_D_HL_DECI:
-  ld  de,savestr+4
-  ld  b,5
-ldhld:
-  call _divHLby10
-  add a,'0'
-  ld  (de),a
-  dec de
-  djnz ldhld
-  ld  hl,savestr
-  ret
-savestr:
-  .db "00000",0
-
-;-----------------------------
-
-DisplayField:
-  ld  a,c
-  sub 29
-  jr  nc,NotMinYScroll
-  xor a
-NotMinYScroll:
-  cp  43
-FieldHeight =$-1
-  jr  c,NotMaxYScroll
-  ld  a,(FieldHeight)
-NotMaxYScroll:
-  ld  l,a
-  ld  h,0
-  add hl,hl
-  add hl,hl
-  add hl,hl
-  add hl,hl
-  add hl,hl
-  push bc                        ; >> 1
-  push de                        ; >> 2
-  ld  de,ScrBuffer
-  add hl,de
-  ld  a,b
-  sub 64
-  jr  nc,NotMinXScroll
-  xor a
-NotMinXScroll:
-  cp 128
-FieldWidth = $-1
-  jr c,NotMaxXScroll
-  ld a,(FieldWidth)
-NotMaxXScroll:
-  push af                        ; >> 3
-  and %11111000
-  rra
-  rra
-  rra
-  ld  c,a
-  ld  b,0
-  ld  de,DispBuffer
-  pop af                         ; << 2
-  and %00000111
-  push af                        ; >> 3
-  cp  6
-  jr  c,CopyScreen
-  inc c
-CopyScreen:
-  add hl,bc
-  ld b,57
-CopyScreenLoop:
-  push bc                        ; >> 4
-  ld bc,16
-  ldir
-  ld c,16
-  add hl,bc
-  pop bc                         ; << 3
-  djnz CopyScreenLoop
-  pop af                         ; << 2
-  ld  c,$b7 ;or a
-Bit0:
-  jr  nz,Bit1
-  halt
-  halt
-  jr  AfterShiftDelay
-Bit1:
-  dec a
-  jr nz,Bit2
-  call ShiftRight1
-  jr AfterShiftDelay
-Bit2:
-  dec a
-  jr nz,Bit3
-  ld a,2
-  call ShiftRight
-  jr AfterShiftDelay
-Bit3:
-  dec a
-  jr nz,Bit4
-  call Chunk
-  call ShiftLeft1
-  jr AfterShift
-Bit4:
-  dec a
-  jr nz,Bit5
-  call Chunk
-  jr AfterShiftDelay
-Bit5:
-  dec a
-  jr nz,Bit6
-  call Chunk
-  call ShiftRight1
-  jr AfterShift
-Bit6:
-  dec a
-  jr nz,Bit7
-  ld a,2
-  call ShiftLeft
-  jr AfterShift
-Bit7:
-  call ShiftLeft
-AfterShiftDelay:
-  halt
-AfterShift:
-  ld hl,DispBuffer
-  ld de,$fc00+$70
-  ld bc,1024-$70
-  ldir
-  pop de                         ; << 1
-  pop bc                         ; << 0k
-  ret
-
-ShiftRight1:
-  ld a,1
-ShiftRight:
-  ld (ShiftRightCounter),a
-  ld a,c
-  ld (ShiftRightChunk),a
-  ld c,16
-  add hl,bc
-  ld b,57
-ShiftRightLoop:
-  push bc
-  ld bc,-32
-  add hl,bc
-  ex de,hl
-  ld a,(de)
-ShiftRightChunk:
-  or a
-  call c,_SHLACC
-  ld c,0
-ShiftRightCounter = $-1
-ShiftRowsLeft:
-  push hl
-  rla
-  ld b,16
-ShiftRowLeft:
-  dec hl
-  rl (hl)
-  djnz ShiftRowLeft
-  pop hl
-  dec c
-  jr nz,ShiftRowsLeft
-  ld bc,-16
-  add hl,bc
-  ex de,hl
-  pop bc
-  djnz ShiftRightLoop
-  ret
-
-ShiftLeft1:
-  ld a,1
-ShiftLeft:
-  ld (ShiftLeftCounter),a
-  ld a,c
-  ld (ShiftLeftChunk),a
-  rla
-  jr nc,ShiftLeftSameByte
-  dec hl
-ShiftLeftSameByte:
-  ex de,hl
-  ld bc,-16
-  add hl,bc
-NewSprite:
-  ex de,hl
-  ld b,57
-ShiftLeftLoop:
-  push bc                        ; >> 1
-  ld bc,-32
-  add hl,bc
-  ex de,hl
-  ld a,(de)
-ShiftLeftChunk:
-  or a
-  call c,_SHRACC
-  ld c,0
-ShiftLeftCounter = $-1
-ShiftRowsRight:
-  push hl                        ; >> 2
-  rra
-  ld b,16
-ShiftRowRight:
-  rr (hl)
-  inc hl
-  djnz ShiftRowRight
-  pop hl                         ; << 1
-  dec c
-  jr nz,ShiftRowsRight
-  ld bc,-16
-  add hl,bc
-  ex de,hl
-  pop bc                         ; << 0k
-  djnz ShiftLeftLoop
-  ret
-
-Chunk:
-  push hl                        ; >> 1
-  push de                        ; >> 2
-  ld  c,16
-  add hl,bc
-  ld  b,57
-ChunkScreen:
-  push bc                        ; >> 3
-  ld  bc,-32
-  add hl,bc
-  ex  de,hl
-  ld  a,(de)
-  call _SHRACC
-  ld  b,16
-ChunkRow:
-  dec hl
-  rld
-  djnz ChunkRow
-  ex  de,hl
-  pop bc                         ; << 2
-  djnz ChunkScreen
-  pop de                         ; << 1
-  pop hl                         ; << 0k
-  ld  c,$37 ;scf
-  ret
-
-;----------- draw ------------
-
-loaddrawdata:
-  ld  d,(hl)
-  inc hl
-  ld  e,(hl)
-  inc hl
-  ld  a,(hl)
-  inc hl
-  ret
-
-Line: ;draw line from de to hl (d<h)
-  push hl
-  push de
-  ld a,d
-  cp h
-  jr c,lineOrdered
-  ex de,hl
-lineOrdered:
-  ld  b,d
-  ld  c,e
-  push hl
-  push bc
-  call FindPixel
-  pop bc
-  pop de
-connectedLine:
-  push hl
-  ld  h,c
-  ld  c,a
-  ld  a,d
-  sub b
-  ld  b,a
-  ld  a,e
-  jr  nz,LineNotPoint
-  cp  h
-  jr  nz,LineNotPoint
-  pop hl
-  jr  DoneLine
-LineNotPoint:
-  sub h
-  ld  de,32
-  jr  nc,LinePositiveY
-  neg
-  ld  de,-32
-LinePositiveY:
-  cp  b
-  jr  nc,SteepLine
-  add a,a
-  ld  (line2sm+1),a
-  ld  h,a
-  xor a
-  sub b
-  add a,a
-  ld  (line1sm+1),a
-  ld  a,h
-  sub b
-  pop hl
-LineLoopGentle:
-  push af
-  ld  a,(hl)
-  or  c
-  ld  (hl),a
-  rrc c
-  jr  nc,$+3
-  inc hl
-  pop af
-  jp  m,line2sm
-line1sm:
-  add a,0
-  add hl,de
-line2sm:
-  add a,0
-  djnz LineLoopGentle
-DoneLine:
-  ld  a,(hl)
-  or  c
-  ld  (hl),a
-  pop de
-  pop hl
-  ret
-SteepLine:
-  ld  h,a
-  neg
-  add a,a
-  ld  (line3sm+1),a
-  ld  a,b
-  add a,a
-  ld  (line4sm+1),a
-  sub h
-  ld  b,h
-  pop hl
-LineLoopSteep:
-  push af
-  ld  a,(hl)
-  or  c
-  ld  (hl),a
-  add hl,de
-  pop af
-  jp  m,line4sm
-line3sm:
-  add a,0
-  rrc c
-  jr  nc,$+3
-  inc hl
-line4sm:
-  add a,0
-  djnz LineLoopSteep
-  jr  DoneLine
-
-drawbox:
- ld  b,h
- ld  c,l
- call FindPixel
-;  ld  b,a
-;makefirstbyte:
-;  or  b
-;  rr  b
-;  jr  nc,makefirstbyte
-;  or  (hl) ;()
-;  ld  (hl),a
-
-  ld  b,e ;yloop
-boxloopy:
-  push bc ;yloop
-  ld  b,d ;xloop
-boxloopx:
-  ld  a,%11111111
-  ld  (hl),a
-  inc hl
-  djnz boxloopx
-
-  ld  b,0
-  ld  a,16
-  sub d
-  ld  c,a
-  add hl,bc
-  pop bc ;yloop
-  djnz boxloopy
-  ret
-
-;-----------------------------
-;----------- link ------------
-;-----------------------------
-#ifdef 0
-TIMEOUT = $1200
-
-send:
-  push af ;ld b,a
-  call _getcsc
-  cp  K_EXIT
-  jp  z,Exit
-  pop af ;ld a,b
-  call SendByte
-;  jr  c,send
-  ret
-
-linkfail:
-  jp  Exit
-
-LinkPrep:
-  ex  (sp),hl
-  push bc
-  push de
-  set 2,(iy+$12) ;cursorblink
-  ld  b,8
-  jp  (hl)
-
-receive:
-  call checklink
-  jr  z,linkfail
-  cp  %11
-  jr  z,receive
-ReceiveByteCont:
-  call LinkPrep
-  jr  ReceiveCont
-ReceiveByte:
-  call LinkPrep
-ReceiveBits:
- ld de,TIMEOUT
-WaitRecBit:
-  call checklink
-  jr  z,LinkFailed
-  cp  %11
-  jr  z,WaitRecBit
-ReceiveCont:
-  sub %10
-  ld  a,%10 
-  ld  d,D0lD1h
-  jr  c,ReceiveLow
-  rra
-  ld  d,D0hD1l
-ReceiveLow:
-  rr  c
-  ld  (AckBit),a
-  ld  a,d
-  out (7),a
- ld de,TIMEOUT
-WaitAckRec:
-  call checklink
-  cp  0
-AckBit =$-1
-  jr  nz,WaitAckRec
-  ld  a,D0hD1h
-  out (7),a
-  ld  d,4
-WaitReadyRec:
-  dec d
-  jr  z,ReadyRec
-  in  a,(7)
-  cp  %11
-  jr  nz,WaitReadyRec
-ReadyRec:
-  djnz ReceiveBits
-  jr  LinkSuccess
-
-SendByte:
-  call LinkPrep
-  ld  c,a
-  inc b
-  jr  SendAcked
-SendBits:
-  rr  c
-
-sendbit:
-  ld  a,D0lD1h
-  jr  nc,sendselected
-  ld  a,D0hD1l
-sendselected:
-  out (7),a
- ld de,TIMEOUT
-waitacknowledge:
-  call checklink
-  jr  nz,waitacknowledge
-SendAcked:
-  ld  a,D0hD1h
-  out (7),a
- ld de,TIMEOUT
-waitsendready:
-  call checklink
-  cp  %11
-  jr  nz,waitsendready
-
-  djnz SendBits
-LinkSuccess: ;nc
-  .db $f6 ;first byte of "or n"
-LinkFailed:  ;c
-  scf
-  ld  a,c
-  res 2,(iy+$12) ;noblink
-  pop de
-  pop bc
-  pop hl
-  ret
-
-linkerror:
-  jp  Exit
-
-checklink:
- pop hl
- dec de
- ld a,d
- or e
- jr z,LinkFailed
-  ld  a,$BF ;key
-  call _readkeypad
-  bit 6,a
-  jr  z,linkerror
-
-  in  a,(7)
-  and %11
- jp (hl)
-  ret
-
-_readkeypad:
-  out (1),a
-  in  a,(1)
-  push af
-  ld  a,%11111111
-  out (1),a
-  pop af
-  ret
-#endif
-
-send:
-SendByte:
-  in  a,(7)
-  and %11
-  jr  z,nolink
-  ld  b,8
-sendloop:
-  ld  de,$8000
-  rl  c
-  ld  a,%11010100
-  jr  nc,sendbit
-  ld  a,%11101000
-sendbit:
-  out (7),a
-sendwait1:
-  call checklink
-  in  a,(7)
-  and  %11
-  jr  nz,sendwait1
-  ld  a,%11000000
-  out (7),a
-sendwait2:
-  call checklink
-  in  a,(7)
-  and %11
-  cp  %11
-  jr  nz,sendwait2
-  djnz sendloop
-  xor a
-  ret
-timeout:
-  scf
-  ret
-
-
-receive:
-  in  a,(7)
-  and %11
-  jr  z,nolink
-  cp  %11
-  jr  z,receive
-  ld  b,8
-receiveloop:
-  ld  de,$8000
-receivewait1:
-  call checklink
-  in  a,(7)
-  and %11
-  cp  %11
-  jr  z,receivewait1
-  rra
-  rl  c
-  rra
-  ld  a,%11010100
-  jr  nc,receivebit
-  ld  a,%11101000
-receivebit:
-  out (7),a
-receivewait2:
-  call checklink
-  in  a,(7)
-  and %11
-  jr  z,receivewait2
-  ld  a,%11000000
-  out (7),a
-  djnz receiveloop
-  xor a
-  ret
-
-checklink:
-  dec de
-  ld  a,d
-  or  e
-  jr  z,timeout
-  ld  a,$BF ;key
-  call _readkeypad
-  bit 6,a
-  jr  z,timeout
-  ret
-_readkeypad:
-  out (1),a
-  in  a,(1)
-  push af
-  ld  a,%11111111
-  out (1),a
-  pop af
-  ret
-nolink:
-  jp  Exit
-
-;-----------------------------
-;---------- levels -----------
-;-----------------------------
-
-LevelsDM:
-  .db 8,5,15,0
-  .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
-  .db 128,57
-  .db 0,0
-
-LevelsDM2:
-  .db 8,5,31,0
-  .db $40,28,2,$C0,28,125, $00,2,63,$80,54,63
-  .db 128,57
-  .db 0
-  .db 4             ;4 boxes
-  .db 4,19,16,14    ;xsize,ysize,xpos,ypos
-  .db 4,19,80,14
-  .db 4,19,16,34
-  .db 4,19,80,34
-
-LevelsR:
-  .db 8,5,24,0
-  .db $40,3,2,$40,6,2, $40,9,2,$40,12,2
-  .db 128,57
-  .db 0
-  .db 1
-  .db 8,29,32,20
-
-LevelsH:
-  .db 8,7,17,0
-#ifdef 0
-huntersize = 31
-#endif
-  .db $40,28,2,$C0,28,125, $00,2,63,$80,54,63
-  .db 128,57
-  .db 0
-  .db 4
-  .db 4,19,16,14
-  .db 4,19,80,14
-  .db 4,19,16,34
-  .db 4,19,80,34
-
-NUM_LEVELS = 10
-
-LevelsS:
-
- .db 4,5,10,1 \ .dw $20F
- .db 0,2,63
- .db 128,57
- .db 2
- .db 28,14,100,41
- .db 28,41,100,14
- .db 0
-
-  .db 5,4,15,0      ;peas,speed,begin_size,balls
-  .db 0,2,63        ;d,y,x
-  .db 128,57        ;field width, height
-  .db 0             ;no additional lines
-  .db 0             ;no boxes
-
-  .db 8,4,15,0
-  .db $40,14,2
-  .db 128,57
-  .db 1
-  .db 28,28,100,28  ;line coords: x1,y1,x2,y2
-  .db 0
-
-  .db 9,4,15,0
-  .db $40,8,2
-  .db 128,57
-  .db 2
-  .db 28,14,100,14
-  .db 28,41,100,41
-  .db 0
-
-  .db 9,3,15,0
-  .db $40,8,2
-  .db 128,80
-  .db 2
-  .db 64,14,64,66
-  .db 20,40,108,40
-  .db 0
-
-  .db 10,3,15,0
-  .db 2,8,$40
-  .db 128,90
-  .db 3
-  .db 18,20,18,70
-  .db 110,20,110,70
-  .db 18,45,110,45
-  .db 0
-
-  .db 7,3,15,0
-  .db 64,4,0
-  .db 128,86
-  .db 6
-  .db 34,13,56,35
-  .db 34,71,56,49
-  .db 72,35,94,13
-  .db 72,49,94,71
-  .db 16,20,16,64
-  .db 110,20,110,64
-  .db 0
-
-  .db 9,2,15,0
-  .db 4,10,$40
-  .db 128,82
-  .db 3
-  .db 0,20,74,20
-  .db 54,40,128,40
-  .db 0,60,74,60
-  .db 0
-
-  .db 12,2,15,0
-  .db 64,4,0
-  .db 128,90
-  .db 6
-  .db 20,16,54,16
-  .db 74,16,110,16
-  .db 20,16,20,72
-  .db 110,16,110,72
-  .db 20,72,54,72
-  .db 74,72,110,72
-  .db 0
-
-  .db 8,2,15,0
-  .db 72,52,$c0
-  .db 128,128
-  .db 13
-  .db 34,56,56,34
-  .db 34,72,56,94
-  .db 72,34,94,56
-  .db 72,94,94,72
-  .db 46,64,80,64
-  .db 22,11,22,33
-  .db 11,22,33,22
-  .db 22,95,22,117
-  .db 11,106,33,106
-  .db 103,11,103,33
-  .db 91,22,115,22
-  .db 103,95,103,117
-  .db 91,106,115,106
-  .db 0
-
-
-;-----------------------------
-;---------- data -------------
-;-----------------------------
-
-TrigPrecalc:
-.db   0,  3,  6,  9, 12, 15, 18, 21
-.db  24, 27, 30, 33, 36, 39, 42, 45
-.db  48, 51, 54, 57, 59, 62, 65, 67
-.db  70, 73, 75, 78, 80, 82, 85, 87
-.db  89, 91, 94, 96, 98,100,102,103
-.db 105,107,108,110,112,113,114,116
-.db 117,118,119,120,121,122,123,123
-.db 124,125,125,126,126,126,126,126
-.db 127
-
-txtWelcome: .db "Welcome to Worm!! ",
-            .db "by Shiar",0
-txtOptions: .db "Options",0
-txtGame:    .db "Singleplayer",0  ;0
-txtGame2:   .db "Peaworm     ",0  ;1
-            .db "Deathmatch",0    ;2
-            .db "Foodmatch ",0    ;3
-            .db "LinkMatch",0     ;4 (>options)
-            .db "Hunting  ",0     ;5
-            .db "Race   ",0       ;6
-            .db "CTF ",0          ;7
-            .db "Domination",0    ;(>=8)
-txtWaiting: .db "Waiting...",0
-txtReceive: .db "Receiving...",0
-
-WormVersion = 092
-WormMsg:   .db "WORM by SHIAR -- test version",0
-txtLevel:  .db "Level ",0
-txtWorms:  .db "Worms: 0",0 ;follows txtLevel
-txtDied:   .db "Died ",0
-txtScore:  .db "Score",0  ;follows txtDied
-txtLeft:   .db " left",0   ;follows txtScore
-txthiscore:.db "HiScore:",0
-txtReady:  .db "Prepare!",0
-txtposReady = 7
-txtGO:     .db "----- GAME OVER -----",0
-
-gamesdata:
-
-_datalink  = %00000001
-_datasingl = %00001000 ;singleplayer=1
-_datalivel = %00000010 ;ix+lives=0 limit
-_datafoodl = %00000100 ;left=0 limit
-_datanextl = %00001000 ;next level if left=0
-_datafood  = %00010000 ;food present
-_datahunt  = %00100000
-_datalaps  = %01000000 ;give lap score
-_datascore = %10000000 ;score>=100 limit
-
-datasingle: .db %00011110
-            .dw LevelsS
-datapeas:   .db %00011010
-            .dw LevelsS
-datadeathm: .db %00000010
-            .dw LevelsDM2
-datafoodm:  .db %10010000
-            .dw LevelsDM
-datalinkm:  .db %00000011
-            .dw LevelsDM
-datahuntin: .db %10100000
-            .dw LevelsH
-datarace:   .db %11000000
-            .dw LevelsR
-datactf:    .db %00000000
-            .dw LevelsDM
-datadomin:  .db %00000000
-            .dw LevelsDM
-
-
-setdata = 18
-resbit  = 2             ;and%11111011
-worm1set:  .dw $B000,$B000 ;%10110000
-           .db 3,0,%01111110,%10,%100 ;< >
-           .db "Worm #1",0
-worm2set:  .dw $B800,$B800 ;%10111000
-           .db 3,0,%00111111,%10000,%1000 ;f1 f2
-           .db "Worm #2",0
-worm3set:  .dw $E800,$E800 ;%11101000 ;$D748+$1000+
-           .db 3,0,%01011111,%10,%100 ;sto ,
-           .db "Worm #3",0
-worm4set:  .dw $F000,$F000 ;%11110000
-           .db 3,0,%01111101,%10,%1 ;enter +
-           .db "Worm #4",0
-worm1 = $B400
-worm2 = $B430
-worm3 = $B460
-worm4 = $B490
-end:
-              ;set:
-heading = 0   ;level*
-pos     = 2   ;level*
-pos2    = 4   ;level
-grow    = 6   ;level
-died    = 8   ;game
-score   = 9   ;game
-delay   = 11  ;game
-
-head    = 12  ;level
-tail    = 14  ;level
-lives   = 16  ;game
-reserv  = 17  ;loop
- ;race:lap
- ;hunt:time
-input   = 18  ;&
-left    = 19  ;&
-right   = 20  ;&
-name    = 21  ;game
-
-Level =$+1
-DispBuffer =$+2 ;912 bytes
-
-ScrBuffer   = $8000 ;-$A1FF (32x256)
-SinCosTable = $A200 ;-$A300 (4x64)
-
-;-----------------------------
-;----------- end -------------
-;-----------------------------
-
-.end
\ No newline at end of file