X-Git-Url: http://git.shiar.nl/wormy.git/blobdiff_plain/c19230bff97b89344d6e9fcec28a5a1df95a2bea..8f37ce5d3f4fb337115fbe7bd092fbc5b66b0085:/wormy.z80 diff --git a/wormy.z80 b/wormy.z80 index d6b21fb..24250e5 100644 --- a/wormy.z80 +++ b/wormy.z80 @@ -18,18 +18,19 @@ ; 93% = DONE -; * internal levels -; * check levels/gametype -; * enough hiscore saves! -; * complete readme +; [* internal levels ] +; [ * check levels/gametype ] +; [ * enough hiscore saves! ] +; [* complete readme ] ; 1% * misc (pollish, bugs, &&&) ; * LINK -; 2% * fix deaths linkplay and transmit game/level data -; 2% * make linkplay available for all gametypes (not just deathmatch) +; 0% * fix first packet loss +; 1% * transmit game/level data +; 1% * get g/o signal (l&l) working +; 2% * send new peas' positions ; * CTF -; 1% * fix pea XOR problem in ctf (+dom?) -; * fix wormstop -; 1% * domination?: take control points by running over them and hold them +; 1% * fix pea XOR problem in ctf +; 1% * fix wormstop in race ;100% = bugs fixed + levels done @@ -42,10 +43,10 @@ #define buffer ;use display buffer (otherwise write directly to screen) #define readymask ;"greys" out the field before starting a level ;#define hlines ;horizontal-line routine for more speed drawing boxes - ;(doesn't work properly) - + ;^^(doesn't work properly)^^ ;#define readytext ;displays "prepare" before level starts ;#define invincible ;worms cannot die =) +;#define optdie ;in race games worms don't die when they run into each other #define cal call #define psh push @@ -76,11 +77,12 @@ _LOAD_ABS_SRC_ADDR = $5209 ;ahl = mm.ldir source _SET_ABS_DEST_ADDR = $5285 ;set destination for mm.ldir = ahl _SET_MM_NUM_BYTES = $464F ;number of bytes for mm.ldir = ahl _mm_ldir = $52ED ;24bit ldir +_MM_LDIR_SET_SIZE = $524D ;_SET_MM_NUM_BYTES + _mm_ldir _RAM_PAGE_1 = $47E3 ;set $8000+ to page 1 _RAM_PAGE_7 = $47F3 ;"""" 7 _PTEMP_END = $D29A ;end of VAT _load_ram_ahl = $462F ;ahl->page+hl -_writeb_inc_ahl = $5567 ;ld (ahl),c +_writeb_inc_ahl = $5567 ;ld (ahl++),c _jforce = $409C ;TI-OS stack restored _EXLP = $4493 ;swap (hl),(de) b times _GETB_AHL = $46C3 ;a=(ahl) \ hl=ahl @@ -140,19 +142,18 @@ start: WormTxt: .db "WORMY by SHIAR -- beta 93%",0 WormIcon: - .db 9,2 - .db %10010110,%01101111 - .db %10110101,%01001011 - .db %01110011,%01001001 - .db %00000011,%10000000 - .db %00000001,%11100000 - .db %00111000,%11111000 - .db %01111110,%00111111 - .db %11101111,%00001111 - .db %11000011,%10000000 + .db 8,2 + .db %00110000,%00111100 + .db %01110000,%00111110 + .db %11100000,%00000111 + .db %11000011,%11000011 + .db %11000111,%11100011 + .db %11101110,%01100111 + .db %01111100,%01111110 + .db %00111000,%00111100 levelhead = 'w' -levelhead2 = 93 ;wormy levels header = "93" +levelhead2 = 94 ;wormy levels header = "93" int_handler: ex af,af' @@ -341,7 +342,7 @@ levselect: cp K_SECOND-1 jr z,loadlevel cp K_EXIT-1 - ret z + jp z,ExitNoStats cp K_ENTER-1 jr nz,levselect ; jr z,loadlevel @@ -393,8 +394,7 @@ skiptitle: cal _SET_ABS_DEST_ADDR ;store in mem. ld hl,0 leveldataSize =$-2 - cal _SET_MM_NUM_BYTES - cal _mm_ldir + cal _MM_LDIR_SET_SIZE cal _LOAD_ABS_SRC_ADDR ;->ahl ld (hiscrposa),a @@ -938,8 +938,8 @@ curworm =$-1 ld hl,$303E ld (_penCol),hl cal getwormname - ld hl,worm1name-18 - add hl,de + psh ix ;wormNname + pop hl ;ld hl,ix cal _vputs ld hl,$363E ;controls ld (_penCol),hl @@ -1028,62 +1028,54 @@ getwormname: ;of (curworm) ret changeworms: - cal _clrWindow - ld hl,txtEName - cal _puts ;"Enter name player " - ld a,(curworm) - add a,'0' - cal _putc - cal getwormname + psh ix + pop hl ;ld hl,ix + psh hl + ld b,8 +emptyname: + ld (hl),' ' + inc hl + dnz emptyname ld a,maxnamelength - cal entername - ld (ix),0 ;end mark - jp DisplayMenu - -entername: - ld h,1 - ld l,h ;) - ld (_curRow),hl ld (namelength),a enternameloop: + ld hl,$FF07 ;begin pos + ld a,6 ;nr of lines + cal clroldcustom + ld hl,$303E + ld (_penCol),hl + pop hl + psh hl + ld (ix),0 + cal __vputs + ld (ix),' ' ld a,'_' - cal _putc - ld hl,_curCol - dec (hl) + cal __vputmap nokeypressed: halt cal GET_KEY or a jr z,nokeypressed + ld hl,namelength cp K_DEL jr nz,continue backspace: - ld hl,namelength ld a,(hl) cp maxnamelength jr nc,nokeypressed inc (hl) - dec ix - ld a,' ' - ld (ix),a - cal _putc - ld hl,_curCol - dec (hl) - dec (hl) jr enternameloop continue: cp K_ENTER - ret z + jr z,nameentered cp K_EXIT - ret z - - ld hl,namelength - dec (hl) - ret z + jr z,nameentered + dec (hl) ;(namelength) + jr z,nameentered ld hl,chartable ld e,a ld d,0 @@ -1091,14 +1083,11 @@ continue: ld a,(hl) or a jr z,nokeypressed - ld (ix),a - cal _putc inc ix cal releasekeys jr enternameloop - chartable: .db 0,".<>!",0,0,0,0 ;down,L,R,up .db 0,"XTOJE0",0 ;enter..clear @@ -1108,12 +1097,18 @@ chartable: .db $D9,"-PKFA6'" ;on..alpha .db "54321*",0,$D0 ;F5..more +nameentered: + pop ix ;stringbegin + ld (ix+8),0 ;end mark + jp DisplayMenu + ;--proc clrold: ld hl,$FD97 ;begin pos - ld de,7 ;bytes to add ld a,35 ;nr of lines +clroldcustom: + ld de,7 ;bytes to add clroldsettings: ld c,9 ;bytes to clear clroldsetsloop: @@ -1139,8 +1134,8 @@ skipsprite: ld b,(hl) ;balls inc b inc b ;skip 6 - ld a,c - cp _datasingle + ld a,(Gametype) + cp gamesingle jr z,skipworms inc b ;multiplayer lvl inc b @@ -1294,7 +1289,6 @@ multiplayer: ;----------------------------- GameOver: - cal _clrLCD ld hl,worm1set ld de,worm1 ld a,4 ;4x (all worms) @@ -1320,8 +1314,9 @@ wormbeglives =$-1 dec a ;loop jr nz,createwormsloop - pop hl ;begin of current level StartLevel: + cal _clrWindow + pop hl ;begin of current level ld de,Left ld a,(hl) inc a ;=255? @@ -1331,7 +1326,6 @@ StartLevel: ld hl,Level dec (hl) ;curlevel-- (not beyond last lvl) cal releasekeys - cal _clrWindow pop hl ;show end msg or smtn ld bc,Exit @@ -1943,33 +1937,44 @@ hilevelcheckdone: jr z,hiscorecheckdone ;no SP checkhiscore: cal loadhiscoreposinahl - cal _Get_Word_ahl ;de=old_hi - psh de - cal _RAM_PAGE_1 ;&& - pop de - ld hl,(worm1+score) - - ld a,h ;New - cp d ;Old - jr c,NotNewHigh ;NewOld - - ld a,e ;old - cp l ;new - jr nc,NotNewHigh ;new=Old - ex de,hl + ld de,(highsave) ;de=prev. hiscore + ld hl,(worm1+score) ;hl=worm1's score + cal _cphlde ;sub hl,de + jr c,NotNewHigh ;newOld + ld (highsave),hl ;store new hiscore + ld de,highsave+2 ;to + ld hl,worm1+name ;from + ld bc,3 ;3 chars + ldir ;store new hiname cal loadhiscoreposinahl - cal _Set_Word_ahl ;de->(ahl) - cal _RAM_PAGE_1 + cal _SET_ABS_DEST_ADDR ;to ahl + xor a + ld hl,highsave + cal _SET_ABS_SRC_ADDR ;from local + ld hl,5 + cal _MM_LDIR_SET_SIZE ;save new + cal _RAM_PAGE_1 -NotNewHigh: ;de=current hiscore - ld hl,$0807 - ld (_curRow),hl +NotNewHigh: + ld hl,$3149 + ld (_penCol),hl ld hl,txthiscore + cal _vputs + ld hl,$0C07 + ld (_curRow),hl + ld hl,highsave+2 cal _puts - ex de,hl ;pop + ld hl,(highsave) cal showHL hiscorecheckdone: @@ -2009,8 +2014,7 @@ ExitNoStats: ld hl,savestart cal _SET_ABS_SRC_ADDR ld hl,saveend-savestart - cal _SET_MM_NUM_BYTES - cal _mm_ldir + cal _MM_LDIR_SET_SIZE cal releasekeys res 4,(iy+9) @@ -2027,16 +2031,20 @@ loadhiscoreposinahl: 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) ld b,a ;levels to skip (including 1 for singleplayer) addlevelposition: + inc hl inc hl ;add one word per level + inc hl + inc hl + inc hl ;plus 3 bytes for name dnz addlevelposition hi__: - add hl,hl ;one WORD per hiscore xor a ;ahl=0(+hl) ld bc,defhiscrpos hiscrposhl =$-2 @@ -2044,6 +2052,8 @@ hiscrposhl =$-2 hiscrposa =$+1 adc a,0 ;ahl=saveloc ret +highsave: + .db 0,0,"WOR ",0 ;----------------------------- ;----------- worm ------------ @@ -2266,9 +2276,11 @@ GotFour: Hitworm: ld a,(gameCar) ld h,a +#ifdef optdie and _datadie cal z,checkhitotherworm ld a,h +#endif and _datamultpeas ;&&bit jr nz,multiple_peas ld a,h @@ -2313,7 +2325,6 @@ peagrowth =$-1 cal removeworm pop hl ; << call pop hl ; << call - pop hl ; << levelp new ld (ix+delay),2 jp StartLevel @@ -2440,6 +2451,7 @@ nolap: ld (ix+reserv),a ret +#ifdef optdie checkhitotherworm: .db $dd,$7d ;ld a,lx cp worm2&255 @@ -2459,6 +2471,7 @@ chkworm: pop ix ret z ;not hit pop bc ;call +#endif stopworm: ld bc,0 previouspos =$-2 @@ -3475,12 +3488,6 @@ circledraw: ;destr:de ret - - - - - - ;----------------------------- ;----------- link ------------ ;----------------------------- @@ -3702,7 +3709,6 @@ txtNo: .db "No",0 txtKeyleft: .db ":left",0 txtKeyright:.db "/right",0 txtLevsel: .db $CF," Select levels ",5,0 -txtEName: .db "Enter name player ",0 txtWaiting: .db "Waiting...",0 txtReceive: .db "Receiving..." ;,0 @@ -3768,23 +3774,26 @@ gamerace = 6 ;used datarace: .db %0000000,0,2,1,-1,-1, 8,10 ;Race (100 score, no collision) gamectf = 7 ;used datactf: .db %1001000,0,4,1,-1,-1, 8, 9 ;CTF (90 score) -_datasingle = %1100110 ;(datasingle) usable like gamesingle worm1set: .dw worm1p,worm1p .db %11110111,%00,-01,K_RIGHT,K_LEFT -worm1name: .db "Wormy ",0 +worm1name: .db "WORMY ",0 worm2set: .dw worm2p,worm2p .db %11111011,%11,-01,K_F2,K_F1 -worm2name: .db "Viper ",0 +worm2name: .db "VIPER ",0 worm3set: .dw worm3p,worm3p .db %11111011,%00,-01,K_COMMA,K_STO -worm3name: .db "Nibbler ",0 +worm3name: .db "NIBBLER ",0 worm4set: .dw worm4p,worm4p .db %11111011,%00,-01,K_PLUS,K_ENTER -worm4name: .db "Jim ",0 +worm4name: .db "JIM ",0 defhiscrpos: - .dw 0,0,0,0,0,0 + .db 0,0,"SHI" + .db 0,0,"SHI" + .db 0,0,"SHI" + .db 0,0,"SHI" + .db 0,0,"SHI" saveend: