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
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
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 ---------
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
dnz recvstuff
ret
sethost:
- halt
- dnz sethost
ld (worm2+left),a ;worm 2+4..
ld (worm4+left),a ;..over link
ld hl,worm1+name
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:
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
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
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)
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
.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: