wormy 0.93.1415
authorMischa Poslawsky <wormy@shiar.org>
Sun, 15 Apr 2001 11:59:36 +0000 (13:59 +0200)
committerMischa Poslawsky <wormy@shiar.org>
Mon, 2 Mar 2009 21:31:52 +0000 (22:31 +0100)
wormy.z80

index b7db1ce8dde014a265691113731aa3dbcd76d75f..d6b21fba449e0a4824df970a35059fda2c0c8890 100644 (file)
--- a/wormy.z80
+++ b/wormy.z80
@@ -109,7 +109,8 @@ worm3p      = $B800 ;-BBFF (400)      %10111O00
 worm4p      = $F000 ;-F3FF (400)      %11110O00
 leveldata   = $F400 ;-FA70 (<=671)
 
 worm4p      = $F000 ;-F3FF (400)      %11110O00
 leveldata   = $F400 ;-FA70 (<=671)
 
-peaspos = $AE01
+turn10  = $AE01
+peaspos = $AE02
 
 ;--- temporary
 
 
 ;--- temporary
 
@@ -496,11 +497,7 @@ dispmenuloop:
 
 hr: ;draw horizontal line at hl
   ld  b,16
 
 hr: ;draw horizontal line at hl
   ld  b,16
-hrloop:
-  ld  (hl),-1
-  inc hl
-  dnz hrloop
-  ret
+  jp  menuinvloop
 
 ;--- menu loop ---
 
 
 ;--- menu loop ---
 
@@ -751,9 +748,9 @@ selright:
   or  a
   jr  z,changegame
   dec a
   or  a
   jr  z,changegame
   dec a
-  jp  z,changelevel ;&&&jr??
+  jr  z,changelevel
   dec a
   dec a
-;  jr  z,changelives
+  jr  z,changelink
   dec a
   jr  z,changenrworms
 ; dec a
   dec a
   jr  z,changenrworms
 ; dec a
@@ -776,7 +773,7 @@ selleft:
   dec a
   jr  z,bchangelevel
   dec a
   dec a
   jr  z,bchangelevel
   dec a
-;  jr  z,bchangelives
+  jr  z,bchangelink
   dec a
   jr  z,bchangenrworms
 ; dec a
   dec a
   jr  z,bchangenrworms
 ; dec a
@@ -789,11 +786,8 @@ bchangecurworm:
   jr  mainMenu
 
 changenrworms:
   jr  mainMenu
 
 changenrworms:
-  ld  a,(Gametype)
-  cp  2
-  jr  c,mainMenu ;type 0/1
-  ;hl=nrworms
-  ld  a,(hl)
+  cal change4spOnly
+  ld  a,(hl) ;hl=nrworms
   inc a
   cp  5
   jr  nc,mainMenu ;may not be >4
   inc a
   cp  5
   jr  nc,mainMenu ;may not be >4
@@ -801,14 +795,37 @@ changednrworms:
   ld  (hl),a
 _dispmenusets:
   jr  dispmenusets ;mainMenu
   ld  (hl),a
 _dispmenusets:
   jr  dispmenusets ;mainMenu
+changenrwormsInit:
+  ld  a,(Gametype)
+  cp  3
+  ld  a,(hl) ;hl=nrworms
+  ret
 bchangenrworms:
 bchangenrworms:
-  ;hl=nrworms
-  ld  a,(hl)
+  cal change4spOnly
+  ld  a,(hl) ;hl=nrworms
   dec a ;0-3
   dec a ;0-3
-  jr  nz,changednrworms ;save >0
+  cp  2
+  jr  nc,changednrworms ;save >=2
 _mainMenu:
   jr  mainMenu
 
 _mainMenu:
   jr  mainMenu
 
+change4spOnly:
+  ld  a,(Gametype)
+  cp  3
+  ret nc
+  pop hl ;cal
+  jr  _mainMenu ;don't change for singleplayer
+
+changelink:
+bchangelink:
+  cal change4spOnly
+  dec hl ;inced earlier
+  dec hl ;gameCar
+  ld  a,1 ;change LS-bit (=link)
+  xor (hl) ;0=1; 1=0
+  ld  (hl),a
+  jr  dispmenusets ;mainMenu
+
 changegame:
   ld  a,0
 Gametype =$-1
 changegame:
   ld  a,0
 Gametype =$-1
@@ -899,9 +916,9 @@ dispmenusets:
   ld  hl,$243E
   ld  (_penCol),hl
   rr  c ;(gameCar)
   ld  hl,$243E
   ld  (_penCol),hl
   rr  c ;(gameCar)
-  ld  hl,txtYes
-  jr  c,displink
   ld  hl,txtNo
   ld  hl,txtNo
+  jr  nc,displink
+  ld  hl,txtYes
 displink:
   cal _vputs
 
 displink:
   cal _vputs
 
@@ -926,7 +943,7 @@ curworm =$-1
   cal _vputs
   ld  hl,$363E ;controls
   ld  (_penCol),hl
   cal _vputs
   ld  hl,$363E ;controls
   ld  (_penCol),hl
-  ld  hl,txtMenu6
+  ld  hl,txtMenuR
   cal _vputs
   jp  mainMenu
 
   cal _vputs
   jp  mainMenu
 
@@ -1123,7 +1140,7 @@ skipsprite:
   inc b
   inc b ;skip 6
   ld  a,c
   inc b
   inc b ;skip 6
   ld  a,c
-  cp  _datasp
+  cp  _datasingle
   jr  z,skipworms
   inc b ;multiplayer lvl
   inc b
   jr  z,skipworms
   inc b ;multiplayer lvl
   inc b
@@ -1160,7 +1177,7 @@ skipobjects:
 
 loadgamecar:
 ;in:    (Gametype)
 
 loadgamecar:
 ;in:    (Gametype)
-;out:   Gametype+1=hl
+;out:   hl=dataTYPE
 ;build: c=(gameCar)=(hl-1)
 ;       a=(wormbeglives)=(hl)
 ;destr: acdehl
 ;build: c=(gameCar)=(hl-1)
 ;       a=(wormbeglives)=(hl)
 ;destr: acdehl
@@ -1237,8 +1254,8 @@ levelsskipped:
 
   psh hl  ;1st level
   ld  a,(gameCar)
 
   psh hl  ;1st level
   ld  a,(gameCar)
-  and _datalink
-  jr  z,GameOver
+  rra ;and _datalink
+  jr  nc,GameOver
 
 linkmatch:
   cal _clrWindow
 
 linkmatch:
   cal _clrWindow
@@ -1266,8 +1283,8 @@ client:
   ld  a,$E6
 multiplayer:
 ;  cal linkok
   ld  a,$E6
 multiplayer:
 ;  cal linkok
-  ld a,D0LD1L
-  out (7),a
+;  ld a,D0LD1L
+;  out (7),a
   ld  (SwapPos),a
   ld  a,2
   ld  (nrworms),a
   ld  (SwapPos),a
   ld  a,2
   ld  (nrworms),a
@@ -1381,8 +1398,8 @@ toobad_noballs:
 #endif
 
   ld  hl,worm1
 #endif
 
   ld  hl,worm1
-  ld  a,(gameCar)
-  cp  _datasp
+  ld  a,(Gametype)
+  cp  gamesingle
   ld  b,1
   jr  z,worminit
   ld  b,4
   ld  b,1
   jr  z,worminit
   ld  b,4
@@ -1406,6 +1423,11 @@ worminit:
   pop bc ;<0
   dnz worminit
 
   pop bc ;<0
   dnz worminit
 
+  inc a ;ld a,1
+  ld  (turn10),a
+  ld  a,2
+  ld  (flashtime),a
+
 ;-------- draw level ---------
 
   ld  a,(de)
 ;-------- draw level ---------
 
   ld  a,(de)
@@ -1503,7 +1525,7 @@ noctf:
 ;-----------------------------
 
   psh hl                        ; >> levelp new
 ;-----------------------------
 
   psh hl                        ; >> levelp new
-  cal showstats
+  cal forceshowstats
   ld  a,(gameCar)
   and _datafood
   jr  z,nofood
   ld  a,(gameCar)
   and _datafood
   jr  z,nofood
@@ -1547,8 +1569,8 @@ maskline:
 
   ld  a,0
 gameCar =$-1
 
   ld  a,0
 gameCar =$-1
-  and _datalink
-  jr  z,initfinished ;no link
+  rra ;and _datalink
+  jr  nc,initfinished ;no link
   xor a
 SwapPos: ;$18 xx -> $E6 xx
          ; jr xx -> and xx
   xor a
 SwapPos: ;$18 xx -> $E6 xx
          ; jr xx -> and xx
@@ -1556,19 +1578,19 @@ SwapPos: ;$18 xx -> $E6 xx
 setclient:
   ld  (worm1+left),a ;worm 1...
   ld  (worm3+left),a ;and worm 3 via link
 setclient:
   ld  (worm1+left),a ;worm 1...
   ld  (worm3+left),a ;and worm 3 via link
-  cal Crecv
+  cal Qrecv
   ld  a,c
   ld  (worm2+name+0),a
   ld  a,c
   ld  (worm2+name+0),a
-  cal Crecv
+  cal Qrecv
   ld  a,c
   ld  (worm2+name+1),a
   ld  a,c
   ld  (worm2+name+1),a
-  cal Crecv
+  cal Qrecv
   ld  a,c
   ld  (worm2+name+2),a
   ld  a,c
   ld  (worm2+name+2),a
-  cal Crecv
+  cal Qrecv
   ld  a,c
   ld  (worm2+name+3),a
   ld  a,c
   ld  (worm2+name+3),a
-  cal Crecv
+  cal Qrecv
   ld  a,c
   ld  (worm2+name+4),a
   jr  initfinished
   ld  a,c
   ld  (worm2+name+4),a
   jr  initfinished
@@ -1618,7 +1640,7 @@ screeninvertloop:
   ld  (hl),a
   inc hl
   xor a
   ld  (hl),a
   inc hl
   xor a
-  cp  h
+  cp  h ;end at >$FFFF
   jr  nz,screeninvertloop
 noflash:
 
   jr  nz,screeninvertloop
 noflash:
 
@@ -1645,6 +1667,17 @@ growspeed =$+1
   ld  (hl),$FF
 nextturnok:
 
   ld  (hl),$FF
 nextturnok:
 
+  ld  a,(gameCar)
+  and _datatime
+  jr  z,nodispupdate
+  ld  hl,turn10
+  dec (hl)
+  jr  nz,nodispupdate ;just once every 10 turns
+  ld  (hl),10 ;reset counter
+  cal forceshowstats ;update score
+nodispupdate:
+
+
   ld  a,0
 nrballs =$-1
   or  a
   ld  a,0
 nrballs =$-1
   or  a
@@ -1723,10 +1756,10 @@ handledworm =$-2
   ld  a,(wormbeglives)
   or  a ;0=no live limit
   ret z ;don't end game
   ld  a,(wormbeglives)
   or  a ;0=no live limit
   ret z ;don't end game
-  ld  a,(Gametype)
-  cp  gametron
-  jr  nz,anyworm ;if not Tron, quit at any worm's death
-  ld  a,(nrworms)
+  ld  a,(gameCar)
+  and _datatime
+  jr  z,anyworm ;quit at any worm's death
+  ld  a,(nrworms) ;livematch: all worms must've died
   ld  b,a ;# of worms
   ld  hl,worm1+lives-(worm2-worm1)
   ld  de,worm2-worm1
   ld  b,a ;# of worms
   ld  hl,worm1+lives-(worm2-worm1)
   ld  de,worm2-worm1
@@ -1743,6 +1776,7 @@ anyworm:
 #endif
 
 Exit:
 #endif
 
 Exit:
+  cal releasekeys
   ld  sp,0 ;pop all
 SpSave = $-2
   ld  a,D0LD1L
   ld  sp,0 ;pop all
 SpSave = $-2
   ld  a,D0LD1L
@@ -1754,11 +1788,9 @@ SpSave = $-2
   ld  b,16*8
   cal menuinvloop ;invert
   inc h ;$FD80
   ld  b,16*8
   cal menuinvloop ;invert
   inc h ;$FD80
-  ld  b,16
-  cal menuinvloop ;<hr>
+  cal hr ;menuinvloop w/ b=16
   ld  hl,$FCE0
   ld  hl,$FCE0
-  ld  b,16
-  cal menuinvloop ;<hr>
+  cal hr
 ; ld  l,$74
 ; ld  b,8
 ; cal menuinvloop
 ; ld  l,$74
 ; ld  b,8
 ; cal menuinvloop
@@ -1775,25 +1807,65 @@ CURtxtGame =$-2
   ld  (_penCol),de
   ld  hl,txtName
   cal _vputs ;Name
   ld  (_penCol),de
   ld  hl,txtName
   cal _vputs ;Name
-  ld  a,$4F
+  ld  a,$3D
   ld  (_penCol),a
   cal _vputs ;Died    Score
   ld  de,$0004
   ld  (_curRow),de
 
   ld  (_penCol),a
   cal _vputs ;Died    Score
   ld  de,$0004
   ld  (_curRow),de
 
+findwinner:
+  ld  hl,(worm1+score)
+  ld  (winnerscore),hl
+  ld  b,3 ;(nrworms)-1
+  ld  hl,worm2+score
+findwinnerloop:
+  psh hl
+  cal _ldHLind
+  ld  de,(winnerscore)
+  ld  a,h
+  cp  d
+  jr  c,nonewwinner ;h<d
+  jr  nz,newwinner  ;h>d
+  ld  a,e
+  cp  l
+  jr  nc,nonewwinner ;l<e
+newwinner:
+  ld  (winnerscore),hl
+nonewwinner:
+  pop hl
+  ld  de,worm2-worm1
+  add hl,de
+  dnz findwinnerloop
+
+  ld  a,(nrworms)
+  ld  b,a
+  cpl ;high value (>$FB)
+  ld  hl,worm1+died
+finddmwinner:
+  cp  (hl)
+  jr  c,nonewdmwinner
+  ld  a,(hl) ;less deaths
+nonewdmwinner:
+  ld  de,worm2-worm1
+  add hl,de
+  dnz finddmwinner
+  ld  (dmwinner),a
+
+;---display worms---
+
   ld  a,(nrworms)
   ld  b,a
   ld  hl,worm1+died
 displayWormStats:
   psh bc
   ld  a,(nrworms)
   ld  b,a
   ld  hl,worm1+died
 displayWormStats:
   psh bc
-  psh hl
 
 
+  psh hl
   ld  bc,left-died
   add hl,bc ;+left
   xor a
   cp  (hl)  ;input=0 = link
   jr  nz,NoLinkIndic
   ld  bc,left-died
   add hl,bc ;+left
   xor a
   cp  (hl)  ;input=0 = link
   jr  nz,NoLinkIndic
-  ld  a,8
+  ld  a,9
   ld  (_curCol),a
   ld  a,$DC ;-O
   cal _putc
   ld  (_curCol),a
   ld  a,$DC ;-O
   cal _putc
@@ -1803,23 +1875,47 @@ NoLinkIndic:
   inc hl
   inc hl ;+name
   cal _puts
   inc hl
   inc hl ;+name
   cal _puts
-
   pop hl
   pop hl
+
   psh hl
   ld  a,13
   ld  (_curCol),a
   ld  a,(hl) ;worm+died
   cal showA
   pop hl
   psh hl
   ld  a,13
   ld  (_curCol),a
   ld  a,(hl) ;worm+died
   cal showA
   pop hl
-  psh hl
 
 
-  ld  a,16
+  psh hl
+  ld  a,10
   ld  (_curCol),a
   ld  (_curCol),a
+  ld  a,(Gametype)
+  cp  gamedeathm
+  jr  nz,nodmwinner ;deathmatch?
+  ld  a,0 ;winner's deaths
+dmwinner =$-1
+  cp  (hl) ;equals this worm?
+  jr  nz,notwinner
+  jr  iswinner
+nodmwinner:
+  jr  c,notwinner ;no singleplayer winners
   inc hl ;worm+score
   cal _ldHLind ;ld hl,(hl)
   inc hl ;worm+score
   cal _ldHLind ;ld hl,(hl)
-  cal showHL ;worm+score
-
+  ld  de,0
+winnerscore =$-2
+  cal _cphlde ;==highest score..
+  jr  nz,notwinner
+iswinner:
+  ld  a,'*'
+  cal _putc ;..then put *
+notwinner:
+  ld  a,16
+  ld  (_curCol),a
+  pop hl
+  psh hl
+  inc hl ;worm+score
+  cal _ldHLind
+  cal showHL
   pop hl
   pop hl
+
   ld  bc,worm2-worm1
   add hl,bc
   pop bc
   ld  bc,worm2-worm1
   add hl,bc
   pop bc
@@ -1877,7 +1973,6 @@ NotNewHigh: ;de=current hiscore
   cal showHL
 hiscorecheckdone:
 
   cal showHL
 hiscorecheckdone:
 
-  cal releasekeys
 waitkey:
   halt
   halt
 waitkey:
   halt
   halt
@@ -2053,8 +2148,8 @@ inputcall:
   jr  z,inlink ;input by link
   cal inkeys ;input by keys
   ld  a,(gameCar)
   jr  z,inlink ;input by link
   cal inkeys ;input by keys
   ld  a,(gameCar)
-  and _datalink
-  ret z ;no link
+  rra ;and _datalink
+  ret nc ;no link
   ld  c,l ;send our keys
   jp  Qsend
 inlink:
   ld  c,l ;send our keys
   jp  Qsend
 inlink:
@@ -2083,12 +2178,12 @@ turn =$-1
   inc (ix+grow)
 nogrow:
 
   inc (ix+grow)
 nogrow:
 
-  ld  a,(Gametype)
-  cp  gametron
-  jr  nz,notron
+  ld  a,(gameCar)
+  and _datatime
+  jr  z,notimescore
   ld  de,1
   cal IncScore
   ld  de,1
   cal IncScore
-notron:
+notimescore:
 
   ld  l,(ix+heading)
   cal inputcall
 
   ld  l,(ix+heading)
   cal inputcall
@@ -2640,10 +2735,10 @@ scorelimit =$-2
   jp  nc,Exit
 
 showstats:
   jp  nc,Exit
 
 showstats:
-  ld  a,(Gametype)
-  cp  gametron
-  ret z
-showstatsEven4tron:
+  ld  a,(gameCar)
+  and _datatime
+  ret nz ;no disp for timematches
+forceshowstats:
   psh ix
   ld  h,0
   ld  l,h
   psh ix
   ld  h,0
   ld  l,h
@@ -2652,34 +2747,51 @@ showstatsEven4tron:
   ld  b,a
   ld  ix,worm1
   ld  a,(gameCar)
   ld  b,a
   ld  ix,worm1
   ld  a,(gameCar)
-  and _datanextl
+  and _datasingl
   jr  nz,showstatsS
 showstatloop:
   psh bc
   jr  nz,showstatsS
 showstatloop:
   psh bc
+#ifdef longnames
+  ld  b,3
+  psh ix
+shownameloop: ;1st 3 chars
+  ld  a,(ix+name)
+  or  a
+  jr  z,nameshown
+  cal __vputmap
+  inc ix
+  dnz shownameloop
+nameshown:
+  ld  a,':'
+  cal _vputmap
+  pop ix
+#else
+  ld  a,(ix+name)
+  cal __vputmap
+  ld  a,':'
+  cal __vputmap
+#endif
   cal showstat
   ld  de,worm2-worm1
   cal showstat
   ld  de,worm2-worm1
-  add ix,de
+  add ix,de ;next
   ld  hl,_penCol
   ld  a,(hl)
   ld  hl,_penCol
   ld  a,(hl)
-  add a,10
+  add a,4 ;div
   ld  (hl),a
   pop bc
   dnz showstatloop
   pop ix
   ret
 
   ld  (hl),a
   pop bc
   dnz showstatloop
   pop ix
   ret
 
-showstat:
+showstat: ;(multiplayer)
   ld  a,(Gametype)
   ld  a,(Gametype)
-  cp  gametron
-  jr  z,showscore
-  ld  a,(wormbeglives)
-  or  a ;0=death limit
-  jr  nz,showlives
+  cp  gamedeathm
+  jr  z,showlives
 showscore:
   ld  h,(ix+score+1)
   ld  l,(ix+score)
   cal _D_HL_DECI
 showscore:
   ld  h,(ix+score+1)
   ld  l,(ix+score)
   cal _D_HL_DECI
-  jr __vputs
+  jr  __vputs
 showlives:
   ld  a,(ix+lives)
   add a,'0'
 showlives:
   ld  a,(ix+lives)
   add a,'0'
@@ -2689,7 +2801,7 @@ __vputmap:
   pop ix
   ret
 
   pop ix
   ret
 
-showstatsS:
+showstatsS: ;(singleplayer)
   ld  hl,txtLevel
   cal __vputs
   ld  a,0
   ld  hl,txtLevel
   cal __vputs
   ld  a,0
@@ -3416,6 +3528,7 @@ csendwait:
   ret
 
 Qsend:         ;try to send 8 bits in C; CF=error --- destr:abcde
   ret
 
 Qsend:         ;try to send 8 bits in C; CF=error --- destr:abcde
+  nop \ nop
   in  a,(7)
   and %11              ;both wires low = exit signal
   jr  z,linkerr        ;error otherwise
   in  a,(7)
   and %11              ;both wires low = exit signal
   jr  z,linkerr        ;error otherwise
@@ -3555,8 +3668,9 @@ txtMenu:  .db "Mode",0  ;1st menu item
          .db "Link",0  ;...
          .db "Worms",0
          .db "worm #",0
          .db "Link",0  ;...
          .db "Worms",0
          .db "worm #",0
-txtMenu6: .db "controls",0
+         .db 0
 posMenu:  .dw $2418,$231E,$2824,$1F2A,$1730,$1936
 posMenu:  .dw $2418,$231E,$2824,$1F2A,$1730,$1936
+txtMenuR: .db "controls",0
 txtoMenu: .db "Back",0  ;1st menu item
          .db "Lives",0 ;2nd
          .db "Limit",0 ;...
 txtoMenu: .db "Back",0  ;1st menu item
          .db "Lives",0 ;2nd
          .db "Limit",0 ;...
@@ -3571,8 +3685,8 @@ txtGame3: .db "Deathmatch",0
 txtGame4: .db "Foodmatch",0
 txtGame5: .db "Timematch",0
 txtGame6: .db "Race",0
 txtGame4: .db "Foodmatch",0
 txtGame5: .db "Timematch",0
 txtGame6: .db "Race",0
-txtGame7: .db "CTF",0
-;            .db "Domination",0    ;8
+txtGame7: .db "CTF" ;,0
+
 posGame:  .db 0,txtGame1-txtGame
          .db txtGame2-txtGame
          .db txtGame3-txtGame
 posGame:  .db 0,txtGame1-txtGame
          .db txtGame2-txtGame
          .db txtGame3-txtGame
@@ -3606,7 +3720,8 @@ TrigPrecalc:
 txtLevel:  .db "Level ",0
 txtWorms:  .db "Worms: 0",0    ;follows txtLevel
 txtName:   .db "Name",0
 txtLevel:  .db "Level ",0
 txtWorms:  .db "Worms: 0",0    ;follows txtLevel
 txtName:   .db "Name",0
-txtDied:   .db "Died    "      ;follows txtName
+txtWinner: .db "Wins   "       ;follows txtName
+txtDied:   .db "Died    "      ;follows txtWinner
 txtScore:  .db "Score",0       ;follows txtDied
 txtLeft:   .db " left",0       ;follows txtScore
 txthiscore:.db "HiScore:",0
 txtScore:  .db "Score",0       ;follows txtDied
 txtLeft:   .db " left",0       ;follows txtScore
 txthiscore:.db "HiScore:",0
@@ -3614,47 +3729,46 @@ txtReady:  .db "Prepare!",0
 txtposReady = 7
 txtGO:     .db 5,5,5,5,5," GAME OVER ",$CF,$CF,$CF,$CF,$CF,0
 
 txtposReady = 7
 txtGO:     .db 5,5,5,5,5," GAME OVER ",$CF,$CF,$CF,$CF,$CF,0
 
-_datalink      = %0000001 ;linkplay
-
-_datafoodl     = %0000010 ;left=0 limit
-_datanextl     = %0000100 ;next level if left=0
-_datasingl     = %0000100 ;singleplayer=1 (=hiscore+keep_length)
-_datamultpeas  = %0001000 ;multiple peas=1
-_datatime      = %0010000 ;time incs score
-_datafood      = %0100000 ;food present
-_datadie       = %1000000 ;worm dies on impact
-_datasp        = %1100110
-
 datalevels: .dw LevelDef, LevelDefM
             .dw LevelDefT,LevelDefM
             .dw LevelDefM,LevelDefM
             .dw LevelDefM,LevelDefC
 nrlevels:   .db 1,3,1,3,3,3,3,1     ;=defaults
 
 datalevels: .dw LevelDef, LevelDefM
             .dw LevelDefT,LevelDefM
             .dw LevelDefM,LevelDefM
             .dw LevelDefM,LevelDefC
 nrlevels:   .db 1,3,1,3,3,3,3,1     ;=defaults
 
-savestart:        ;     �game info
-                  ;     | �lives
+_datalink      = %0000001 ;linkplay
+_datafoodl     = %0000010 ;left=0 limit
+_datasingl     = %0000100 ;singleplayer=1 (=hiscore+keep_length+nextlevel)
+_datamultpeas  = %0001000 ;multiple peas=1
+_datatime      = %0010000 ;time incs score (timematch)
+_datafood      = %0100000 ;food present
+_datadie       = %1000000 ;worm dies on impact
+;reserved       %10000000 ;for future use
+
+savestart:        ;     �game info (see above)
+                  ;     | �lives (0=unlimited)
                   ;     | | �nrworms (can be altered by user)
                   ;     | | �nrworms (can be altered by user)
-                  ;     | | | �level (set to 1 at startup)
-                  ;     | | | |  �speed (-1=def)
-                  ;     | | | |  |  �grow speed (-1=none)
-                  ;     | | | |  |  |  �turn speed
-                  ;     | | | |  |  |  |  �score limit
-gamesingle   =  0 ;     | | | |  |  |  |  |
+                  ;     | | | �level (reset to 1 at startup)
+                  ;     | | | |  �speed/delay (-1=def)
+                  ;     | | | |  |  �grow speed (-1=none; 0=continuous)
+                  ;     | | | |  |  |  �turn speed (8=def)
+                  ;     | | | |  |  |  |  �score limit (0=none)
+gamesingle   =  0 ;used | | | |  |  |  |  |
 datasingle: .db  %1100110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives)
 gamepeas     =  1
 datapeas:   .db  %1100100,1,1,1,-1,-1, 8, 0 ;Peaworm (SP; 1 live)
 gametron     =  2
 datatron:   .db  %1010100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth)
 datasingle: .db  %1100110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives)
 gamepeas     =  1
 datapeas:   .db  %1100100,1,1,1,-1,-1, 8, 0 ;Peaworm (SP; 1 live)
 gametron     =  2
 datatron:   .db  %1010100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth)
-gamedeathm   =  3
-datadeathm: .db  %1000000,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth)
+gamedeathm   =  3 ;used
+datadeathm: .db  %1000001,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth)
 gamefoodm    =  4
 datafoodm:  .db  %1100000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score)
 gametimem    =  5
 gamefoodm    =  4
 datafoodm:  .db  %1100000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score)
 gametimem    =  5
-datatimem:  .db  %1010000,1,2,1,-1,-1, 8,10 ;Timematch (1 live, 100 score)
-gamerace     =  6
+datatimem:  .db  %1010000,1,2,1,-1, 0, 8, 0 ;Timematch (tron, 100 score)
+gamerace     =  6 ;used
 datarace:   .db  %0000000,0,2,1,-1,-1, 8,10 ;Race (100 score, no collision)
 datarace:   .db  %0000000,0,2,1,-1,-1, 8,10 ;Race (100 score, no collision)
-gamectf      =  7
+gamectf      =  7 ;used
 datactf:    .db  %1001000,0,4,1,-1,-1, 8, 9 ;CTF (90 score)
 datactf:    .db  %1001000,0,4,1,-1,-1, 8, 9 ;CTF (90 score)
+_datasingle    = %1100110 ;(datasingle) usable like gamesingle
 
 worm1set:  .dw worm1p,worm1p
            .db %11110111,%00,-01,K_RIGHT,K_LEFT
 
 worm1set:  .dw worm1p,worm1p
            .db %11110111,%00,-01,K_RIGHT,K_LEFT