From: Mischa Poslawsky Date: Mon, 30 Apr 2001 20:44:04 +0000 (+0200) Subject: wormy 0.94.1430 X-Git-Url: http://git.shiar.nl/wormy.git/commitdiff_plain/f3f7b1cf38613a97046b61ba09bff74cf79a629b wormy 0.94.1430 --- diff --git a/wormy.z80 b/wormy.z80 index 24250e5..6ed5a09 100644 --- a/wormy.z80 +++ b/wormy.z80 @@ -24,7 +24,7 @@ ; [* 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 @@ -247,20 +247,14 @@ _searchnext: 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 @@ -380,10 +374,11 @@ skiptitle: 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 @@ -463,7 +458,12 @@ DisplayMenu: ;---draw menu--- 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 @@ -794,7 +794,7 @@ changenrworms: changednrworms: ld (hl),a _dispmenusets: - jr dispmenusets ;mainMenu + jr _dispmenusets ;mainMenu changenrwormsInit: ld a,(Gametype) cp 3 @@ -827,27 +827,30 @@ bchangelink: 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 @@ -862,6 +865,14 @@ bchangelevel: 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 @@ -1671,6 +1682,18 @@ nextturnok: 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 @@ -2023,19 +2046,16 @@ ExitNoStats: 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 @@ -2282,7 +2302,7 @@ Hitworm: ld a,h #endif and _datamultpeas ;&&bit - jr nz,multiple_peas + jr nz,chkctfpeas ld a,h and _datafood jp z,WormDead ;no food @@ -2328,7 +2348,7 @@ peagrowth =$-1 ld (ix+delay),2 jp StartLevel -chkpeahit: ;hl=peapos +chkpeahit: ;bc=ownpos;hl=peapos (destr:ad) ld a,(sprsize) inc a ld d,a @@ -2343,70 +2363,55 @@ chkpeahit: ;hl=peapos 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 ;----------------------------- @@ -2667,18 +2672,7 @@ Seed =$+1 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 @@ -2691,21 +2685,80 @@ chkloopx: 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 ----------- @@ -3187,47 +3240,6 @@ FP_Bit =$+1 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: @@ -3245,26 +3257,27 @@ 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 @@ -3694,7 +3707,8 @@ txtGame5: .db "Timematch",0 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 @@ -3765,7 +3779,7 @@ 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 ;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 @@ -3779,13 +3793,13 @@ worm1set: .dw worm1p,worm1p .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: @@ -3795,6 +3809,8 @@ defhiscrpos: .db 0,0,"SHI" .db 0,0,"SHI" +Gametype: .db 0 ;last gamemode + saveend: ;set: