From: Mischa Poslawsky Date: Fri, 21 Dec 2001 14:37:00 +0000 (+0100) Subject: wormy 0.95.1C21 X-Git-Url: http://git.shiar.nl/wormy.git/commitdiff_plain/9ed28d246aef107b01273e08b6594598a4e12fcb wormy 0.95.1C21 --- diff --git a/wormy.z80 b/wormy.z80 index 22fc918..0ff73a0 100644 --- a/wormy.z80 +++ b/wormy.z80 @@ -1,5 +1,5 @@ ; Title : Wormy -; Version : 96% (0.96.C14) +; Version : 96% (0.96.C21) ; Release Date : UUHHhhh... soon?!? ; Filename : wormy.86p (5kb) ; Author(s) : Shiar @@ -17,23 +17,17 @@ ; 96% = DONE -; [* internal levels ] -; [ * check levels/gametype ] -; [ * enough hiscore saves! ] -; [* complete readme ] +; * complete readme ; 1% * misc (pollish, bugs, &&&) -; 1% * long length save (level#6) -; * mem at worm #4 +; * mem at worm #4 (still 12 bytes or so.....) +; * fix line proc (+large circles) ; * LINK -; 1% * transmit game/level data -; Xfirst packet loss?? or vti onlyXXXXX -; X1/3 worms over linkXXXX -; Xsend new peas' positionsXXXXX +; 1% * fix transmit game/level data ;100% = bugs fixed + levels done -; MAYBE: sound -; NO: coop +;>110%: sound, startpos +;>120%: coop (DON'T COUNT ON IT) ;----------------------------- ;----------------------------- @@ -45,6 +39,7 @@ #define readymask ;"greys" out the field before starting a level #define coolzgfx ;nice graphics for game over screen +;#define intlevels ;internal levels ;#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 @@ -55,7 +50,6 @@ #include "asm86.h" #include "ti86asm.inc" - _SHRACC = $4383 ;4x srl a _SHLACC = $438B ;4x sll a _divHLby10 = $4044 ;hl=hl/10 @@ -102,16 +96,16 @@ worm3 = $AC3E ;-AC59 (1F) worm4 = $AC5D ;-AC77 (1F) balls = $AC7C ;-ACFF (3x43d) SinCosTable = $AD00 ;-AE00 (4*40) - ;free $AE01 ;-AFFF (1FF) +turn10 = $AE01 ;-AE01 (1) (counter) +peaspos = $AE02 ;-AE05 (4) (peas) +;free = $AE06 ;-AFFF (1FA) worm1p = $B000 ;-B7FF (800) %1011O000 worm3p = $B800 ;-BBFF (400) %10111O00 - ;free $BF91 ;-BFFF (6F) - ;program $D748 ;-EFFF (186D+4A) +;free = $BF91 ;-BFFF (6F) +;program = $D748 ;-EFFF (186D+4A) worm4p = $F000 ;-F3FF (400) %11110O00 leveldata = $F400 ;-FA70 (<=671) - -turn10 = $AE01 ; (1) (counter) -peaspos = $AE02 ;-AE05 (4) (peas) + ;can you believe i actually left $269 bytes of memory unused?!? ;MEM|8---9---A---B---C---D---E---F---| ; |..[------]||[]|......[-----]|[].| @@ -131,21 +125,30 @@ DispBuffer = $FC70 ;------- program start ------- ;----------------------------- -.org _asm_exec_ram - -wormVhost = 095 -wormVclient = 195 + .org %1101011101001000 start: nop jp Start - .db 1 - nop + ld bc,42 + .org $-1 ;3y3 M 1337! .dw WormTxt .dw WormIcon - WormTxt: - .db "WORMY by SHIAR -- 96% C14",0 + ld d,a + ld c,a + ld d,d + ld c,l + ld e,c + jr nz,$+100 + ld a,c + jr nz,$+$55 + ld c,b + .dw 16713 + .db %1010010 + jr nz,$+47 + dec l + .db " 96% C21",0 WormIcon: .db 8,2 .db %00000000,%00111100 @@ -193,7 +196,7 @@ Start: ldir inc a ;ld a,$D4 ld i,a - im 2 + im 2 ;...it *does* work ;) cal _RAM_PAGE_7 ld hl,$BFFF ;VAT start @@ -270,7 +273,11 @@ searchcomplete: ld a,255 ld (ix),a ;end mark +#ifdef intlevels ld ix,templevels-6 +#else + ld ix,templevels-3 +#endif levelselectmenu: psh ix ;offset ld a,-2 @@ -313,7 +320,7 @@ displevel: jr dispnextlevel readylevelfile: ;selected level at ahl -; ld hl,templevels-3 +; ld hl,templevels-3/0 ld a,b add a,3 ;sellev+3 (#0==-3) ld e,a @@ -375,7 +382,11 @@ levdescclearloop: cal _vputs jr levselectmenu+1 __levselect: +#ifdef intlevels ld ix,templevels-6 ;reset 2 1st page +#else + ld ix,templevels-3 +#endif _levselect: ld b,-2 ;level selected jr levselect @@ -533,12 +544,9 @@ dispmenuloop: ; ld b,0 ;b=menu# ret -;hr: ;draw horizontal line at hl -; ld b,16 -; jp menuinvloop - -hr: +hr: ;draw horizontal line at hl ld b,16 +; jp menuinvloop ;shorter but not good for pausescreen hrloop: ld (hl),-1 inc hl @@ -1255,10 +1263,13 @@ skipballs: skipflags: ld a,(Gametype) + cp gamerace + jr z,skiplaps cp gamectf jr nz,noflagstoskip inc hl inc hl +skiplaps: inc hl inc hl noflagstoskip: @@ -1304,8 +1315,35 @@ LetsGetThisPartyOn: ld a,$17 ;no exit ld (CheckExit),a ;set exit state +setupworms: + ld hl,worm1set + ld de,worm1 + ld a,4 ;4x (all worms) +createwormsloop: + ex de,hl + ld bc,died ;0008 + add hl,bc +; ld b,0 + ld (hl),b ;died=0 + inc hl + ld (hl),b ;score=0 + inc hl + ld (hl),b ;score+1=0 + inc hl + ld (hl),2 ;delay=2 + inc hl + ld (hl),3 ;lives=x +wormbeglives =$-1 + inc hl + ex de,hl ;de=wormX+head + ld bc,18 + ldir ;copy 18 bytes + dec a ;loop + jr nz,createwormsloop + +OhMyGodItsALabel: ;pj34r my coding skillz cal loadgamecar - psh hl + psh hl ;datatype cal hlatlevel ex (sp),hl ;pop \ psh leveldata psh hl ;psh loadgamecar @@ -1316,6 +1354,9 @@ gameCar =$-1 ;--------- link ------------ +wormVhost = 095 +wormVclient = 195 + linkmatch: cal _clrWindow ld c,wormVhost @@ -1359,14 +1400,20 @@ setclient: ld hl,worm2+name ld b,9 cal sendstuff - pop hl - pop de + pop hl ;loadgamecar + pop de ;leveldata psh de - psh hl - ld b,168 + psh hl ;loadgamecar + ld b,8 + cal sendstuff + ld hl,gameCar + ld b,1 + cal sendstuff + ld hl,Gametype + ld b,1 cal sendstuff ex de,hl - ld b,8 + ld b,168 cal sendstuff jr StartLevel sendstuff: @@ -1409,16 +1456,22 @@ sethost: ld hl,worm2+name ld b,9 cal recvstuff - pop hl - pop de - ld hl,templevels + pop hl ;loadgamecar + pop de ;leveldata + ld hl,templevels ;&&&&&&& ld de,datalink psh de - psh hl - ld b,168 + psh hl ;loadgamecar + ld b,8 + cal recvstuff + ld hl,gameCar + ld b,1 + cal recvstuff + ld hl,Gametype + ld b,1 cal recvstuff ex de,hl - ld b,8 + ld b,168 cal recvstuff ;-------- load level --------- @@ -1447,32 +1500,6 @@ StartLevel: cal _HLTIMES10 ;hl=10*(hl) ld (scorelimit),hl -setupworms: - ld hl,worm1set - ld de,worm1 - ld a,4 ;4x (all worms) -createwormsloop: - ex de,hl - ld bc,died ;8 - add hl,bc -; ld b,0 - ld (hl),b ;died=0 - inc hl - ld (hl),b ;score=0 - inc hl - ld (hl),b ;score+1=0 - inc hl - ld (hl),2 ;delay=2 - inc hl - ld (hl),3 ;lives=x -wormbeglives =$-1 - inc hl - ex de,hl ;de=wormX+head - ld bc,18 - ldir ;copy 18 bytes - dec a ;loop - jr nz,createwormsloop - Nextlevel: cal _clrWindow pop hl ;begin of current level @@ -1575,8 +1602,11 @@ worminit: ld (hl),a ;y2 inc hl ld (hl),a ;x2 + inc hl + inc hl + ld (hl),a ;growH=0 - ld bc,(worm2-worm1)-5 + ld bc,(worm2-worm1)-7 add hl,bc pop bc ;<0 dnz worminit @@ -2246,6 +2276,8 @@ removewormloop: cal res4pixels pop hl inc (ix+grow) + jr nz,DoesWormTailEqualsWormHead + inc (ix+grow+1) ;+256 DoesWormTailEqualsWormHead: cal _cphlde jr nz,removewormloop @@ -2256,6 +2288,7 @@ DoesWormTailEqualsWormHead: ld a,0 beginsize =$-1 ld (ix+grow),a + ld (ix+grow+1),0 ;high safewormsizedone: ;de=ix+head @@ -2375,6 +2408,7 @@ donediddelydone: ld e,(ix+pos2) ld d,(ix+pos2+1) +#ifdef optdie psh hl ld hl,previouspos ld (hl),c @@ -2386,6 +2420,7 @@ donediddelydone: inc hl ld (hl),d pop hl +#endif ;-------- move worm ---------- @@ -2466,6 +2501,9 @@ PeaX =$-1 add a,15 peagrowth =$-1 ld (ix+grow),a + jr nc,wormset2grow + inc (ix+grow+1) +wormset2grow: cal NewPea ld hl,Left dec (hl) @@ -2608,37 +2646,6 @@ checklap: pop bc ret -#ifdef optdie -checkhitotherworm: - .db $dd,$7d ;ld a,lx - cp worm2&255 - psh ix - jr nz,chkworm2 ; ret nz - ld ix,worm1 - jr chkworm -chkworm2: - ld ix,worm2 - -chkworm: - ld h,(ix+tail+1) - ld l,(ix+tail) - ld e,(ix+head) - ld d,(ix+head+1) - cal ChkWorm - pop ix - ret z ;not hit - pop bc ;call -#endif -stopworm: - ld bc,0 -previouspos =$-2 - ld de,0 - ld (ix+pos),c - ld (ix+pos+1),b - ld (ix+pos2),e - ld (ix+pos2+1),d - ret - ;-------- draw worm ---------- Drawworm: @@ -2665,10 +2672,14 @@ Drawworm: ld (ix+head),l ld (ix+head+1),h - ld a,(ix+grow) - dec a + ld l,(ix+grow) + ld h,(ix+grow+1) + dec hl + ld a,h + or l jr z,removetail - ld (ix+grow),a + ld (ix+grow),l + ld (ix+grow+1),h ret removetail: @@ -2681,6 +2692,13 @@ removetail: cal resbit ld (ix+tail),l ld (ix+tail+1),h + psh hl + cal res4pixels + pop hl + ld c,(hl) + inc hl + ld b,(hl) + jr set4pixels res4pixels: cal ResPixel @@ -2827,7 +2845,7 @@ Seed =$+1 WormDead: #ifdef invincible jp stopworm -#else +#endif ld a,2 ld (flashtime),a ld (ix+delay),respawndelay @@ -2880,6 +2898,37 @@ anyworm: ld a,$A7 ;exit@end of turn ld (CheckExit),a ;set exit state ret ;finish turn + +#ifdef optdie +checkhitotherworm: + .db $dd,$7d ;ld a,lx + cp worm2&255 + psh ix + jr nz,chkworm2 ; ret nz + ld ix,worm1 + jr chkworm +chkworm2: + ld ix,worm2 + +chkworm: + ld h,(ix+tail+1) + ld l,(ix+tail) + ld e,(ix+head) + ld d,(ix+head+1) + cal ChkWorm + pop ix + ret z ;not hit + pop bc ;call + +stopworm: + ld bc,0 +previouspos =$-2 + ld de,0 + ld (ix+pos),c + ld (ix+pos+1),b + ld (ix+pos2),e + ld (ix+pos2+1),d + ret #endif CheckPea: ;@hl; destr:abcde @@ -2918,24 +2967,6 @@ 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 @@ -3012,7 +3043,7 @@ chktimematchover: jr z,nneexxtt ;yourself cp (hl) ret nz ;someone else still alive - dec hl ;+delay + dec hl ;+del0ay dec hl ;+score+1 ld a,(hl) cp (ix+score+1) @@ -3652,103 +3683,118 @@ drawline: ;(d,e)-(h,l) psh bc ;destr: a psh hl psh de - ld a,d - cp h - jr c,lineOrdered - ex de,hl -lineOrdered: + ld a,d ;a=d=x + cp h ;h=xx + jr c,lineXincs ;if x>xx + ex de,hl ;make x + ld c,a ;c=mask (always) + ld a,h ;a=xx + sub b ;xx-x + ld b,a ;b=deltax (always>0) + ld a,l ;a=yy + jr nz,lineexists ;deltax!=0 + cp e ;yy==y + jr nz,lineexists ;deltay!=0 + pop hl ; :