; [* complete readme ]
; 1% * misc (pollish, bugs, &&&)
; * LINK
-; 0% * fix first packet loss
+; * fix first packet loss
; 1% * transmit game/level data
; 1% * get g/o signal (l&l) working
; 2% * send new peas' positions
loadgametype:
psh de
- inc bc
- inc bc
cal _Get_Word_ahl ;ld de,(ahl++)
psh af
- ld a,d
- or e
- jr z,defaultlevels
ld a,e ;set new level
ld (bc),a
inc bc
ld a,d
ld (bc),a
- dec bc
-defaultlevels:
+ inc bc
pop af
pop de ;counter
dec d ;8x
cal _Get_Word_ahl
ld (leveldataSize),de
+
ld d,8 ;counter
- ld bc,datalevels-2
+ ld bc,datalevels
cal loadgametype
- ld (hilvlposa),a
+ ld (hilvlposa),a ;singleplayer levels
ld (hilvlposhl),hl
ld d,4
cal loadgametype
ld hl,$FC00+$3E0
cal hr
dispmainmenu:
- ld hl,dispmenusets ;mainMenu
+ ld hl,Gametype
+ ld a,(hl)
+ dec a ;will be inced @changegame
+ and 7
+ ld (hl),a
+ ld hl,changegame ;dispmenusets ;mainMenu
psh hl ;jump here after ret
ld hl,txtMenu
ld ix,posMenu
changednrworms:
ld (hl),a
_dispmenusets:
- jr dispmenusets ;mainMenu
+ jr _dispmenusets ;mainMenu
changenrwormsInit:
ld a,(Gametype)
cp 3
jr dispmenusets ;mainMenu
changegame:
- ld a,0
-Gametype =$-1
+ ld a,(Gametype)
inc a
+ cal changedgame
+ jr z,changegame
+ jr dispmenusets ;mainMenu
changedgame:
and 7 ;mod 8
ld (Gametype),a
- jr dispmenusets ;mainMenu
+ cal getnrlevels
+ xor a
+ cp (hl)
+ ret
bchangegame:
ld a,(Gametype)
dec a
- jr changedgame
+ cal changedgame
+ jr z,bchangegame
+ jr dispmenusets ;mainMenu
changelevel:
inc hl ;hl=loadgamecar+2
psh hl
ld a,(hl) ;(curlevel)
- ld hl,Gametype
- ld d,0
- ld e,(hl)
- ld hl,nrlevels
- add hl,de
+ cal getnrlevels
cp (hl) ;max level for sel.game
pop hl
jr z,_mainMenu
jr nz,changedlevel
jr _mainMenu
+getnrlevels: ;for current gametype at hl
+ ld hl,Gametype
+ ld d,0
+ ld e,(hl)
+ ld hl,nrlevels
+ add hl,de
+ ret
+
getcustomkey:
cal _vputs
dec ix
cal forceshowstats ;update score
nodispupdate:
+drawctfpea1:
+ jr drawctfpea2
+ ld bc,drawctfpea1
+ ld hl,(peaspos)
+ cal tryDrawPea
+drawctfpea2:
+ jr noctfpeas2draw
+ ld bc,drawctfpea2
+ ld hl,(peaspos+2)
+ cal tryDrawPea
+noctfpeas2draw:
+
ld a,0
nrballs =$-1
jp _clrWindow
loadhiscoreposinahl:
- ld h,0
+ ld hl,0 ;for peaworm and singleplayer
ld a,(Gametype)
- cp 2
- ld l,h ;hl=0 for peaworm and singleplayer
- jr nz,hi_
- ld a,(nrlevels+1)
- ld l,a ;skip peaworm slots for tron mode
-hi_:
- add hl,hl ;one WORD per hiscore
or a ;Singleplayer?
- ld b,0 ;offset 0 for SP
jr z,hi__
- ld a,(Level)
+ dec a ;peaworm?
+ jr z,hi_
+ ld a,(nrlevels+1) ;skip peaworm slots if tron mode
+hi_:
+ ld bc,(Level)
+ add a,c
ld b,a ;levels to skip (including 1 for singleplayer)
addlevelposition:
inc hl
ld a,h
#endif
and _datamultpeas ;&&bit
- jr nz,multiple_peas
+ jr nz,chkctfpeas
ld a,h
and _datafood
jp z,WormDead ;no food
ld (ix+delay),2
jp StartLevel
-chkpeahit: ;hl=peapos
+chkpeahit: ;bc=ownpos;hl=peapos (destr:ad)
ld a,(sprsize)
inc a
ld d,a
cp d
ret ;c=pea
-flagcaptured:
- psh hl
- ld de,30
- cal IncScore
- pop hl
-sillylabel:
- cal WormDead
-DrawAllPeas:
- ld hl,(peaspos)
- cal DrawPea
- ld hl,(peaspos+2)
- jp DrawPea
-
-multiple_peas:
+chkctfpeas:
ld hl,(peaspos) ;1st pea
- psh hl
ld a,(ix+reserv)
ld e,a ;push a
- and %01
- jr nz,sel_ownpea
- ld hl,(peaspos+2) ;2nd pea
-sel_ownpea:
- cal chkpeahit
- pop hl ;(peapos) 1st pea
- jp c,WormDead ;stopworm ;own pea hit
-
- ld a,e ;peek a (that's x86 asm for pop\push ;)
- and %01
+ and %01 ;ourpea (0|1)
jr z,sel_otherpea
- ld hl,(peaspos+2) ;2nd pea
+ ld hl,(peaspos+2) ;2nd pea ;&&&ex de,hl?
sel_otherpea:
cal chkpeahit
- jp c,hitflag
-
-;no peas hit
- ld a,e
- cal flagtoken
- jp z,WormDead
- ld b,a ;%10
- srl b ;%01
- add a,b ;%11
+ jr c,hitflag
+;no peas hit:
+ ld a,e ;peek a (that's x86asm for pop\push ;)
+ bit 1,a ;%10 = carrying flag?
+ jp z,WormDead ;if not just die
+ xor %11 ;drop flag
ld (ix+reserv),a
- cal DrawPea ;restore own flag
- jr sillylabel ;inv both\die
+ psh af
+ cal WormDead
+ pop af ;which flag? (=and %1)
+ ld hl,drawctfpea1 ;restore #1
+ jr z,nottheotherflag
+ ld hl,drawctfpea2 ;restore #2
+nottheotherflag:
+ ld (hl),$E6 ;and nn
+ ret
hitflag: ;correct pea hit
ld a,e ;pop a
- xor %01 ;0=1;1=0
+ xor %11 ;invert flag taken + ownflag
ld (ix+reserv),a
- cal flagtoken
+ and %10 ;just returned?
psh af ;safe z-flag
cal DrawPea ;remove
pop af
- jr z,flagcaptured
- jr stopworm
+ jr nz,Drawworm ;flag taken, continue game
+ psh hl
+ ld de,20 ;flag captured+returned
+ cal IncScore
+ pop hl
+ ld a,$E6 ;and nn
+ ld (drawctfpea1),a ;redraw..
+ ld (drawctfpea2),a ;..both flags
+ jr Drawworm
-flagtoken:
- and %01 ;current
- add a,a ;<< for cp
- ld b,a ;in b
- ld a,e
- and %10 ;own
- cp b ;same?
- ret ;Z=yes: no flag taken
+DrawAllPeas:
+ ld hl,(peaspos)
+ cal DrawPea
+ ld hl,(peaspos+2)
+ jp DrawPea
;-----------------------------
add a,2
ret
-NewPea:
- ld a,(FieldWidth)
- add a,127-4
- cal randompos
- ld h,a
- ld a,(FieldHeight)
- add a,56-4
- cal randompos
- ld l,a
- ld (PeaY),hl
-
-CheckPea:
+CheckPea: ;@hl; destr:abcde
ld c,l
ld a,(sprsize)
ld e,a
cal FindPixel
and (hl)
pop hl
- jr nz,NewPea ;pixel found
+ ret nz ;nz=pixel found
inc b
dec d
jr nz,chkloopx
inc c
dec e
jr nz,chkloopy
-;all ok; empty space
+ ret ;z=empty space
+
+tryDrawPea: ;hl=peapos;bc=dopea
+ psh bc
+ cal CheckPea
+ pop bc
+ ret nz ;unsuccesful
+ ld a,$18 ;jr
+ ld (bc),a
+ jr DrawPea
+NewPea:
+ ld a,(FieldWidth)
+ add a,127-4
+ cal randompos
+ ld h,a
+ ld a,(FieldHeight)
+ add a,56-4
+ cal randompos
+ ld l,a
+ ld (PeaY),hl
+ cal CheckPea
+ jr nz,NewPea
DrawPea: ;hl=(PeaY)
ld b,h
ld c,l
ld de,0
spritepos =$-2
- jp PutSprite ;||-ed
+; jp PutSprite
+
+PutSprite: ;||@(b,c)
+ ;by SHIAR only ix saved
+ cal FindPixel
+ ld (beginbit),a
+ ld a,0
+sprsize =$-1
+ ld b,a ;rows
+sprloopy:
+ psh bc ;rows
+ psh hl
+ ld a,(de)
+ ld c,a
+ inc de
+ ld a,(sprsize)
+ ld b,a ;width
+beginbit =$+1
+ ld a,1
+sprloopx:
+ sla c ;draw?
+ jr nc,sprnodraw
+ psh af
+ xor (hl)
+ ld (hl),a
+ pop af
+sprnodraw:
+ rrca ;next bit
+ jp nc,nextbitok
+ inc hl ;next byte
+nextbitok:
+ dnz sprloopx
+
+ pop hl
+ ld bc,32 ;next line
+ add hl,bc
+ pop bc
+ dnz sprloopy
+ ret
;----------- score -----------
pop de
ret
-;--- sprite ---
-
-PutSprite: ;||@(b,c)
- ;by SHIAR only ix saved
- cal FindPixel
-putspr:
- ld (beginbit),a
- ld a,0
-sprsize =$-1
- ld b,a ;rows
-sprloopy:
- psh bc ;rows
- psh hl
- ld a,(de)
- ld c,a
- inc de
- ld a,(sprsize)
- ld b,a ;width
-beginbit =$+1
- ld a,1
-sprloopx:
- sla c ;draw?
- jr nc,sprnodraw
- psh af
- xor (hl)
- ld (hl),a
- pop af
-sprnodraw:
- rrca ;next bit
- jp nc,nextbitok
- inc hl ;next byte
-nextbitok:
- dnz sprloopx
-
- pop hl
- ld bc,32 ;next line
- add hl,bc
- pop bc
- dnz sprloopy
- ret
-
;--- objects ---
drawstuff:
psh hl
ld l,(hl)
ld h,b
+ cal drawsmtn
+ pop hl
+ inc hl
+ jr drawstuff
+drawsmtn:
dec a ;1 = line
- cal z,drawline
+ jp z,drawline
dec a ;2 = fatline
- cal z,drawfatline
+ jp z,drawfatline
dec a ;3 = box
- cal z,drawbox
+ jp z,drawbox
dec a ;4 = circle
- cal z,drawcircle
+ jp z,drawcircle
dec a ;5 = hline
#ifdef hlines
- cal z,drawhline
+ jp z,drawhline
#else
- cal z,drawline
+ jp z,drawline
#endif
- pop hl
- inc hl
- jr drawstuff
-
drawbox: ;(d,e)-(h,l)
ld b,l ;Delta-y
#ifdef hlines
txtGame6: .db "Race",0
txtGame7: .db "CTF" ;,0
-posGame: .db 0,txtGame1-txtGame
+posGame: .db 0
+ .db txtGame1-txtGame
.db txtGame2-txtGame
.db txtGame3-txtGame
.db txtGame4-txtGame
gametron = 2
datatron: .db %1010100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth)
gamedeathm = 3 ;used
-datadeathm: .db %1000001,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth)
+datadeathm: .db %1000000,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
.db %11110111,%00,-01,K_RIGHT,K_LEFT
worm1name: .db "WORMY ",0
worm2set: .dw worm2p,worm2p
- .db %11111011,%11,-01,K_F2,K_F1
+ .db %11111011,%01,-01,K_F2,K_F1
worm2name: .db "VIPER ",0
worm3set: .dw worm3p,worm3p
.db %11111011,%00,-01,K_COMMA,K_STO
worm3name: .db "NIBBLER ",0
worm4set: .dw worm4p,worm4p
- .db %11111011,%00,-01,K_PLUS,K_ENTER
+ .db %11111011,%01,-01,K_PLUS,K_ENTER
worm4name: .db "JIM ",0
defhiscrpos:
.db 0,0,"SHI"
.db 0,0,"SHI"
+Gametype: .db 0 ;last gamemode
+
saveend:
;set: