wormy 0.95.1909
authorMischa Poslawsky <wormy@shiar.org>
Sun, 9 Sep 2001 10:25:14 +0000 (12:25 +0200)
committerMischa Poslawsky <wormy@shiar.org>
Mon, 2 Mar 2009 21:31:52 +0000 (22:31 +0100)
wormy.z80

index e0bb2b21affa566f98efa39a2fd6ba19de19d30a..34e5d0b45449c51d9eaeec53289ea700d7296ae7 100644 (file)
--- a/wormy.z80
+++ b/wormy.z80
@@ -281,67 +281,109 @@ levelselectmenu:
   cal hr
   ld  hl,$FC00+(56*16)
   cal hr
-  ld  hl,$0C01 ;x=1
+  ld  hl,$0601 ;x=1
   ld  (_penCol),hl
 dispnextlevel:
-  ld  de,3
-  add ix,de
-  ld  a,(ix)
+  ld  a,(ix+3)
+  ld  b,a
   inc a ;cp 255
   jr  z,__levselect
-  dec a
 displevel:
-  ld  h,(ix+1)
-  ld  l,(ix+2) ;ahl=(ix)
-  cal _load_ram_ahl ;hl=ahl
-  ld  b,(hl) ;b=title size
-  cal _vputs
   ld  hl,_penCol
   ld  (hl),$01 ;x=1
   inc hl
   ld  a,(hl)
   add a,6
   ld  (hl),a ;y+6
-  ld  hl,availevels
-  inc (hl)
   cp  49 ;bottom of screen
   jr  nc,_levselect
+  ld  de,3
+  add ix,de
+  ld  hl,availevels
+  inc (hl)
+  ld  a,b ;(ix+0)
+  ld  h,(ix+1)
+  ld  l,(ix+2) ;ahl=(ix)
+  cal _load_ram_ahl ;hl=ahl
+  cal _vputs
   jr  dispnextlevel
 
+readylevelfile: ;selected level at ahl
+; ld  hl,templevels-3
+  ld  a,b
+  add a,3 ;sellev+3 (#0==-3)
+  ld  e,a
+  add a,a ;*2
+  add a,e ;*3
+  ld  e,a
+  ld  d,0 ;de=sellev*3
+  add hl,de
+  ld  a,(hl) ;ade=(hl)
+  inc hl
+  ld  d,(hl)
+  inc hl
+  ld  e,(hl)
+  ex  de,hl ;ahl=ade
+skiptitle:
+  ld  d,a ;psh ahl
+  psh hl
+  cal _GETB_AHL ;ld a,(ahl)
+  pop hl
+  or  a
+  ld  a,d ;pop ahl
+  psh af
+  cal _INC_PTR_AHL ;ahl++
+  pop af ;cp 0
+  jr  nz,skiptitle ;goto #0-terminator
+  ret
+
 levup:
   cal menupos
   dec b ;up
   ld  a,b
   cp  -3
-  jr  nz,levselected
+  jr  nz,levselect
   inc b ;undo
-  jr  levselected
+  jr  levselect
 levdown:
   cal menupos
   inc b ;down
   ld  a,b
   cp  -2
 availevels =$-1
-  jr  nz,levselected
+  jr  nz,levselect
   dec b ;back up
-levselected:
-  jp  menupos
-
+levselect:
+  cal menupos
+  ld  hl,$3900
+  ld  (_penCol),hl
+  pop hl
+  psh hl
+  cal readylevelfile
+  cal _load_ram_ahl ;hl=ahl
+  ld  de,$FFA0 ;desc.text
+  xor a
+levdescclearloop:
+  ld (de),a ;empty
+  inc de
+  cp  d ;de>$FFFF (offscreen)
+  jr  nz,levdescclearloop
+  cal _vputs
+  jr  levselectmenu+1
 __levselect:
   ld  ix,templevels-6 ;reset 2 1st page
 _levselect:
   ld  b,-2 ;level selected
-  cal menupos
-  pop hl
-levselect:
+  jr  levselect
+levselectmenu:
   psh hl
   psh bc
   cal ubergetkey
   pop bc ;GET_KEY destr. b
   cp  K_UP
-  cal z,levup
+  jr  z,levup
   dec a ;K_DOWN
-  cal z,levdown
+  jr  z,levdown
   cp  K_SECOND-1
   jr  z,loadlevel
   pop hl
@@ -350,39 +392,14 @@ levselect:
   cp  K_EXIT-1
   jp  z,ExitNoStats
   cp  K_ENTER-1
-  jr  nz,levselect
+  jr  nz,levselectmenu
 ; jr  z,loadlevel
 
 loadlevel:
-; ld  hl,templevels-3
-  ld  a,b
-  add a,3 ;sellev+3 (#0==-3)
-  ld  e,a
-  add a,a ;*2
-  add a,e ;*3
-  ld  e,a
-  ld  d,0 ;de=sellev*3
-  add hl,de
-  ld  a,(hl) ;ade=(hl)
+  cal readylevelfile
   or  a ;levelfile on page 0 (=internal)
   jr  z,levelloaded
-
-  inc hl
-  ld  d,(hl)
-  inc hl
-  ld  e,(hl)
-  ex  de,hl ;ahl=ade
-skiptitle:
-  ld  b,a ;psh ahl
-  psh hl
-  cal _GETB_AHL ;ld a,(ahl)
-  pop hl
-  or  a
-  ld  a,b ;pop ahl
-  psh af
-  cal _INC_PTR_AHL ;ahl++
-  pop af ;cp 0
-  jr  nz,skiptitle ;goto #0-terminator
+  cal skiptitle ;skip description
 
   cal _Get_Word_ahl
   ld  (leveldataSize),de
@@ -1326,12 +1343,9 @@ client:
   cal _puts
   ld  a,$E6
 multiplayer:
-;  cal linkok
-;  ld a,D0LD1L
-;  out (7),a
   ld  (SwapPos),a
-  ld  a,2
-  ld  (nrworms),a
+; ld  a,2
+; ld  (nrworms),a
 
 ;-----------------------------
 ;--------- game over ---------
@@ -1577,13 +1591,6 @@ levelhasbeensetup:
 
   psh hl                        ; >> levelp new
   cal forceshowstats
-  ld  a,(gameCar)
-  and _datafood
-  jr  z,nofood
-  cal NewPea
-nofood:
-  ld  bc,(worm1+pos)
-  cal DisplayField
 
 #ifdef readymask
   ld  hl,$FC70
@@ -1657,8 +1664,6 @@ recvstuff:
   dnz recvstuff
   ret
 sethost:
- halt
- dnz sethost
   ld  (worm2+left),a ;worm 2+4..
   ld  (worm4+left),a ;..over link
   ld  hl,worm1+name
@@ -1668,6 +1673,14 @@ sethost:
   ld  b,9
   cal recvstuff
 initfinished:
+  ld  a,(gameCar)
+  and _datafood
+  jr  z,nofood
+  ld  ix,worm1
+  cal NewPea
+nofood:
+  ld  bc,(worm1+pos)
+  cal DisplayField
 
   ld  b,startdelay
 ReadyDelay:
@@ -2779,6 +2792,24 @@ tryDrawPea: ;hl=peapos;bc=dopea
   jr  z,DrawPea
   ret
 
+sendnewpeaoverlink:
+  ld  a,(gameCar)
+  rra ;and _datalink
+  ret nc ;no link
+  ld  a,(ix+left)
+  or  a
+  jr  z,receivenewpeaoverlink
+  ld  c,l ;send pea's pos
+  cal Qsend
+  ld  c,h
+  jp  Qsend ;&&&possible jr
+receivenewpeaoverlink:
+  cal Qrecv ;Crecv
+  ld  l,c
+  cal Qrecv ;Crecv
+  ld  h,c
+  ret
+
 NewPea:
   ld  a,(FieldWidth)
   add a,127-4
@@ -2788,9 +2819,10 @@ NewPea:
   add a,56-4
   cal randompos
   ld  l,a
-  ld  (PeaY),hl
   cal CheckPea
   jr  nz,NewPea
+  cal sendnewpeaoverlink
+  ld  (PeaY),hl
 DrawPea: ;hl=(PeaY)
   ld  b,h
   ld  c,l
@@ -3649,8 +3681,7 @@ sendbit:
 sendwaitack:
   cal checklink                ;other calc must lower other wire
   jr  nz,sendwaitack
-  ld  a,D0HD1H         ;raise one, ok to raise other
-  out (7),a
+  cal linkok           ;raise one, ok to raise other (out (7),D0HD1H)
 sendfinish:
   cal checklink
   cp  %11              ;both raised (by other calc)
@@ -3689,8 +3720,7 @@ received:
 recvwaitack:
   cal checklink
   jr  z,recvwaitack    ;same wire will be raised again by other calc
-  ld  a,D0HD1H
-  out (7),a            ;raise both
+  cal linkok           ;raise both
 recvfinish:
   dnz recvloop         ;repeat for all bits
   xor a                        ;nc=no error
@@ -3988,7 +4018,9 @@ defspriteimg:     .db %01100000
                .db %01100000
 
 deflevels:
-  .db "Internal Levels" ;,0
+  .db "Internal Levels",0
+  .db "by SHIAR -- still t"
+  .db "o be added...." ;,0
 
   .db 0,deflevels/256,deflevels&255
 templevels: