X-Git-Url: http://git.shiar.nl/wormy.git/blobdiff_plain/7dc3fb8d9e296ee3d0872be593e7eef0069f73ae..b262dccc8af53cee36ce4ea836a5a9d9ecc91e10:/wormy.z80 diff --git a/wormy.z80 b/wormy.z80 index e0bb2b2..edb7056 100644 --- a/wormy.z80 +++ b/wormy.z80 @@ -3,8 +3,7 @@ ; Release Date : summer 2001 ; Filename : wormy.86p (5kb) ; Author(s) : Shiar -; Email Address : shiar0@hotmail.com -; ICQ UIN : #43840958 +; Email Address : wormy@shiar.org ; Web Page : www.shiar.org ; Description : ruling Nibbles-like game 1-4 players ; Where to get this game : www.shiar.org (home of Wormy) @@ -26,8 +25,9 @@ ; * LINK ; * fix first packet loss ; 1% * transmit game/level data +; 1% * 1/3 worms over link ;;;1% * get g/o signal (l&l) working -; 2% * send new peas' positions +;;;1% * send new peas' positions ;100% = bugs fixed + levels done @@ -48,7 +48,6 @@ #define cal call #define psh push #define dnz djnz -;#define halt nop #include "asm86.h" #include "ti86asm.inc" @@ -135,7 +134,8 @@ wormVclient = 193 start: nop jp Start - .dw 1 + .db 1 + nop .dw WormTxt .dw WormIcon @@ -276,113 +276,129 @@ levelselectmenu: ld hl,txtLevsel cal _vputs ;"< SELECT LEVELS >" ld hl,$FC00+(2*16) - cal hr - ld hl,$FC00+(10*16) - cal hr + ld b,16*9 + cal menuinvloop 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 - dec a ;K_DOWN - cal z,levdown - cp K_SECOND-1 - jr z,loadlevel + dec a ;cp K_DOWN + jr z,levdown + sub K_UP-1 + jr z,levup pop hl - cp K_RIGHT-1 + inc a ;cp K_RIGHT jp z,levelselectmenu - cp K_EXIT-1 + cp K_ENTER-K_RIGHT + jr z,loadlevel + sub K_EXIT-K_RIGHT jp z,ExitNoStats - cp K_ENTER-1 - jr nz,levselect + inc a ;cp K_SECOND + 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 +1342,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 +1590,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 +1663,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 +1672,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 +2791,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 +2818,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 @@ -2841,6 +2872,8 @@ nextbitok: timematchscore: ;piece of crap checking whether you've already won in timematch ld a,(nrworms) ld b,a ;# of worms + dec a + ret z ;singleplayer ld hl,worm1+lives ld de,worm2-worm1 ld a,(handledworm) @@ -3649,8 +3682,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 +3721,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 +4019,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: