X-Git-Url: http://git.shiar.nl/wormy.git/blobdiff_plain/8f60bb28bd8e341e88dfc15ae3db93991f753cf5..1876a18ca8df681bd7285c823abd0b031c468406:/wormy.z80 diff --git a/wormy.z80 b/wormy.z80 index 785cea9..7473d01 100644 --- a/wormy.z80 +++ b/wormy.z80 @@ -16,19 +16,20 @@ ; ßÛÛÛß ßÛÛßß ßÛÛÛÛÛß ÛÛ ÛÛÝ ßÛÛÛÛÛÛÛÛÛß ;_______________________________________________________________________________ ; -; Version : 98% (0.98.118) -; Release Date : 2002 January 18 +; Version : 99% (0.99.34) +; Release Date : 2002 March 4 ; Author(s) : Shiar ; Email Address : wormy@shiar.org ; Web Page : www.shiar.org -; Description : perfect Nibbles game with free movement, nine -; game modes, for 1-4 players -; Where to get this game : www.shiar.org +; Description : perfect Nibbles game with free movement, nine game +; modes, for 1-4 players, many levels and editor +; Where to get this game : wormy.shiar.org ; Other games by author(s) : Nemesis beta ; Additional Credits to : Matthew Shepcar : wrote original Peaworm, end'98 ; Jonah Cohen : helped writing worm -; Files : wormy.z80 (89kB) : 515ad14b922572bdc8a96e780b8b24ca -; wormy.86p (6512) : efef32a8c541b4585087f55deb31f51d +; Files : wormy.txt (9283) : 12345678901234567890123456789012 +; wormy.z80 (100k) : 515ad14b922572bdc8a96e780b8b24ca +; wormy.86g (12k) : efef32a8c541b4585087f55deb31f51d ;_______________________________________________________________________________ ;--- notes --------------------------------------------------------------------- @@ -36,7 +37,7 @@ ; * Game README is wormy.txt ; * Use for LEARNING practises ONLY! ; * Don't _ever_ release altered code w/o permission! -; * Give me credits when you use stuff inhere +; * Give me credits when you use any of this stuff ; * I'm not responsible for any damage this might cause, yada yada... ; * Although I've commented & labeled quite some stuff, due to ; crazy optimizations and weird coding, it may be harder to @@ -126,69 +127,32 @@ ; | |_____| ____ |_____/ |_____| ;_______________________________________________________________________________ -; 97% = PREVIOUS -; X [15] lives >9 dispay -; X [15] sp modes not configurable -; X [16] LVL: episode #2: 10 sp levels -; X [17] lives stats for every liveslimited game (also !dm) -; X [18] LINK: fix transmit game/level data -; X [19] datalevels+nrlevels not in program if !intlevels -; X [19] mem at worm #4 (still 12 bytes or so.. or more? or less?) -; X [19] alter level editor to use new address and set level id #97 -; X [19A] team score! -; X [19A] autogrowth doesn't always work -> init (turn) -; X [111] ED: disabled objects counted causing CRASH when writing hiscore! -; X [111] LINK: init+multiple pea transmit seems to work.. -; X [111] LINK: host/client swapped (host now sends level config) -; X [111] LINK: optimize transmit (most initcode same for client+host) -; X [113] menu limit in multifm not x10 -; X [113] wormhit procedure seperate (called now) -; X [114] LINK: peas sent again :P -; X [114] internal level check and sprite storage removed -; X [115] layout data stuff at bottom -; X [115] ED: init place bar fixed -; X [115] ED: keys also usable together with mouse -; X [115] ED: improved version handling -; X [115] LINK: receive message not needed anymore afaik -; X [115A] $D8 used for spacing at g/o screen. i rule B) -; X [115A] exit at g/o goes back to menu -; X [115A] more in menu lets you reselect the levelfile -; X [115A] LINK: fixed waiting mode (minor display problem) -; X [116] incs at skiplevels effectively replaced by add (-4 bytes) -; X [116] another 2 bytes shaved off -; X [116] LINK: received gamemode now displayed correctly at g/o -; X [116] gamecar right after gametype saves about 20 bytes -; X [116] LINK: minimize sent data -; X [116] remove +input in worm storage -; X [116] head position init uses same data as tail (-4 bytes) -; X [116] fix bug at no levels (115A intro) -; X [117] saved 6 bytes by hardcoding some empty bytes in title graphics -; X [117] two pieces of duplicate code removed -; X [117] combined temporary storage for _D_HL_DECI and temp hiscore -; X [117] more repetitious code shortened -; X [117] wrong stack handling in checkpea, and unnecessary bloat -; X [117] stopworm after eating pea (pea|wall overwrite fixed!) -; X [117] old code removed from hitworm -; X [117] replace jps by jrs (moved code around a bit) -; X [117] scorebar doesn't diplay 1st wormname char anymore -; X [117] scorebar can display both lives and score when appropriate -; X [118] look at init-z in line routine again -> fixed steepline init-z -; X [118] snake86 findpixel (saves 1 byte) -; X [118] removed flash at new level start -; X [118] begin growth set in normal worm init loop -; X [118] bad code and potentially bad code reviewed and optimized -; X [118] final sourcecode layout ((sub)captions, index, indents, etc) ; 98% = CURRENT ; X [119] ED: new 53 file format with support for 128 objects instead of 32 ; X [119] LVL: episode #4: 10 hard sp levels (ordered XO-XO-XO-X) +; X [120] fixed greymask (and it now ands instead of ors) +; X [120] fixed growth set after death +; X [121] fixed linkplay (couldn't turn it on anymore..) +; X [121] LVL: Wormage + Wormage ][ (2x 10 sp levels) +; X [121] pea randomizer doesn't give x>128 +; X [121] mixed single-/multipea singleplayer levels (re)set correctly +; X [126] circles left|above 0,0 drawn correctly now! +; X [126] fixed multiple pages of levelfiles +; X [29] optimized a few more bytes (less empty bytes so prettier binary ;) +; X [225] ED: ctf/race level copy/move fix +; X [225] LVL: episode #1: 5 ctf+5 race; episode #3 removed (all in #1 now) +; X [225] add v2 id (yas2) +; X [227] redundant calls removed or moved +; X [227] fixed: ctf score increased by taking _any_ pea +; X [227] no more points in race for dieing on the second half +; X [227] no score decrease for dieing in race (no longer needed, see above) +; 99% = CURRENT ; 1% * LINK: >Somehow do a lot of testing with 2 calcs< *sigh* -; * LVL: episode #1: add 2-3 circle- and line levels. -; * LVL: episode #3: 6x5 multiplayer levels ; * LVL: episode #5: 10 easy sp levels (do i _have_ to?) -; * LVL: Eric? (ep#5?) -; * LVL: Wormage +; * LVL: Eric's Yumworms (ep#5?) ; * LVL: Free Bird ; * LVL: Jonah? +; * scorebar last digit (at 128-3) not displayed by _vputs ; 1% * fix any bugs that come up ;--- future features ----------------------------------------------------------- @@ -197,11 +161,13 @@ ; ; * correct team winners ; * level compression -; * arrow to offscreen peas -; * sound -; * startpos -; * pause in linkplay -; * coop (DON'T COUNT ON IT) +; * ubersized bouncies ;) +; * arrow to offscreen peas +; * w00t AI +; * sound +; * startpos +; * pause in linkplay +; * coop (DON'T COUNT ON IT) ;_______________________________________________________________________________ ; _/_/_____ __ _ _______ _ _ ______ _______ @@ -228,11 +194,11 @@ _MOV4B = $429B ;4x ld (de),(hl) _MOV5B = $4297 ;5x ld (de),(hl) _mov9b = $4283 ;9x ld (de),(hl) _ldHLind = $4010 ;ld hl,(hl) -_swapt_ = $45F3 ;ex_ahl_bde +_swapt_ = $45F3 ;ex ahl,bde (doesn't work?) _Get_Word_ahl = $521D ;ld de,(ahl) _Set_Word_ahl = $5221 ;ld (ahl),de -_INC_PTR_AHL = $4637 ;ahl=ahl+1 -_AHL_PLUS_2_PG3 = $4C3F ;ahl=ahl+2 +_INC_PTR_AHL = $4637 ;inc ahl +_AHL_PLUS_2_PG3 = $4C3F ;add ahl,2 _SET_ABS_SRC_ADDR = $4647 ;set source for mm.ldir =ahl _LOAD_ABS_SRC_ADDR = $5209 ;ahl = mm.ldir source _SET_ABS_DEST_ADDR = $5285 ;set destination for mm.ldir = ahl @@ -247,14 +213,19 @@ _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 +_OP1TOOP6 = $4263 - #define buffer ;use display buffer (otherwise write directly to screen) - #define readymask ;"greys" out the field before starting a level - #define coolzgfx ;nice graphics for game over screen + #define id2 ;yas2 level identifier - this'll add (65) bytes + #define buffer ;use display buffer, otherwise write directly to screen (11) + #define readymask ;"greys" out the field before starting a level (20) +;#define readytext ;-displays "prepare" before level starts (42) + #define coolzgfx ;nice graphics for game over screen (98) #define spprotect ;options not changable for singleplayer modes ;#define intlevels ;-internal levels -;#define readytext ;-displays "prepare" before level starts -;#define invincible ;-worms cannot die =) + ;-to become invincible, define the magic word :D + +levelhead = 'w' +levelhead2 = 97 ;wormy levels header = "0" ;_______________________________________________________________________________ ; _______ _______ _____ ______ _______ ______ _______ @@ -275,7 +246,7 @@ worm3 = $AD3D ;-AD5A (1E) worm4 = $AD5B ;-AD78 (1E) balls = $AD79 ;-AE00 (<=3x2D) (bb<=45) turn10 = $AE01 ;-AE01 (1) (counter) -peaspos = $AE02 ;-AF05 (4-260) (peas) +peaspos = $AE02 ;-AF05 (4-104) (peas) ;free = $AF06 ;-AFFF (F9) worm1p = $B000 ;-B7FF (800) %1011O000 worm3p = $B800 ;-BBFF (400) %10111O00 @@ -309,7 +280,7 @@ drawctfpea2 = peaspos+6 ;--- layout -------------------------------------------------------------------- -;(wormN) set: +;(wormN) offs: set: heading = 0 ;level* pos = 2 ;level* pos2 = 4 ;level @@ -340,9 +311,18 @@ wormsize = 30 ;^mark^ start: ;turn back NOW! nop ;and so it begins... jp Start +#ifndef id2 ld bc,$5242 rst 10h .dw WormIcon +#else + ld (bc),a + nop + ld d,h + rst 10h + .dw WormIcon + .dw WormData +#endif ld d,a ld c,a ld d,d @@ -356,7 +336,7 @@ start: ;turn back NOW! .db %1010010 jr nz,$+47 dec l - .db " 98% .118",0 + .db " 99% .34",0 WormIcon: .db 8,2 .db %00000000,%00111100 @@ -367,9 +347,54 @@ WormIcon: .db %10011001,%00011001 .db %01000010,%11000001 .db %00111100,%00111110 - -levelhead = 'w' -levelhead2 = 97 ;wormy levels header = "97" +#ifdef id2 +WormData: + .db 1 + .dw wormlevel +wormlevel: + .db 4 ;priority + .db 12 ;string + .db "wor" ;description + .dw yasexec ;execution routine + .dw yascomment-yasdetect + .dw yasdetect-$-1 ;detection routine + .dw yasicon-yascomment + .dw yascomment-$-1 ;comment routine + .dw yasdataend-yasicon + .dw yasicon-$-1 ;icon routine +yasexec: + rst 10h + ex de,hl + ld a,b + cal skiptitle ;title (plus size+header <- all non-0) +; cal skiptitle ;description + jp leveldataAHL-3 +yasdetect: + cal _AHL_PLUS_2_PG3 ;skip past length bytes + cal _Get_Word_ahl + ld hl,levelhead+(levelhead2*256) + call _cphlde + ret z + scf + ret +yascomment: + inc hl + inc hl ;skip header + ret +yasicon: + ld hl,$F400+levelicon-yasicon + ld bc,6+(256*1) + or a + ret +levelicon: + .db %00011100 ;..XXX... ...XXX.. + .db %00011110 ;.X...X.. ...XXXX. + .db %00000011 ;.X..X... ......XX + .db %10000001 ;X..X..XX X......X + .db %01011011 ;X..X..XX .X.XX.XX + .db %01101110 ;X...XXX. .XX.XXX. +yasdataend: +#endif int_handler: ex af,af' @@ -381,34 +406,12 @@ int_handler: jp $0039 int_end: +;--- search levels ------------------------------------------------------------- + Start: - ld (SpSave),sp cal _runindicoff cal _flushallmenus - im 1 - ld a,$D4 - ld h,a - ld l,0 ;ld hl,$D400 - ld d,a - ld e,1 ;ld de,$D401 - ld b,e - ld c,l ;ld bc,$0100 - dec a ;ld a,$D3 - ld (hl),a - ldir - ld hl,int_handler - ld d,a - ld e,a ;ld de,$D3D3 - ld bc,int_end-int_handler - ldir - inc a ;ld a,$D4 - ld i,a - im 2 ;...it *does* work ;) - -;--- search levels ------------------------------------------------------------- - -restart: cal _RAM_PAGE_7 ld hl,$BFFF ;VAT start ld ix,templevels @@ -448,15 +451,12 @@ stringfound: cp e jr nz,_searchnext ;not worm ld a,levelhead2 - cp d + cp d ;=0 jr nz,_searchnext - inc ix ;save level's ahl - ld a,h - ld (ix),a - inc ix - ld a,l - ld (ix),a - inc ix + ld (ix+1),h ;save level's ahl + ld (ix+2),l + ld de,3 ;&&&d=0 + add ix,de _searchnext: cal _RAM_PAGE_7 jr searchnext @@ -510,16 +510,21 @@ levelselectmenu: ;load next page cal menuinvloop ld hl,$FC00+$380 ;(*,56) cal hr - ld hl,$0601 ;x=1 + ld hl,$0C01 ;x=1 ld (_penCol),hl dispnextlevel: ld de,3 - add ix,de + add ix,de ;goto next ld a,(ix) - ld b,a + ld h,(ix+1) + ld l,(ix+2) + cal _load_ram_ahl ;hl=ahl + cal _vputs + ld hl,availevels + inc (hl) + ld a,(ix+3) ;next inc a ;cp 255 jr z,__levselect -displevel: ld hl,_penCol ld (hl),$01 ;x=1 inc hl @@ -528,13 +533,6 @@ displevel: ld (hl),a ;y+6 cp 49 ;bottom of screen jr nc,_levselect - 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 loadlevel1: @@ -604,7 +602,7 @@ levdescclearloop: cp d ;de>$FFFF (offscreen) jr nz,levdescclearloop cal _vputs - jr levselectmenu+1 + jr levselectmenuloop+1 __levselect: #ifdef intlevels ld ix,templevels-6 ;reset 2 1st page @@ -614,7 +612,7 @@ __levselect: _levselect: ld b,-2 ;level selected jr levselect -levselectmenu: +levselectmenuloop: psh hl psh bc cal ubergetkey @@ -631,7 +629,7 @@ levselectmenu: sub K_EXIT-K_RIGHT jp z,ExitNoStats inc a ;cp K_SECOND - jr nz,levselectmenu + jr nz,levselectmenuloop ; jr z,loadlevel loadlevel: @@ -641,7 +639,7 @@ loadlevel: jr z,levelloaded #endif cal skiptitle ;skip description - +leveldataAHL: cal _Get_Word_ahl ld (leveldataSize),de @@ -673,6 +671,36 @@ leveldataSize =$-2 levelloaded: cal _RAM_PAGE_1 +;_______________________________________________________________________________ +; _______ _____ ______ _______ _____ __ _ _____ _______ +; | | | | | |_____/ |______ | | \ | | | +; | | | |_____| | \_ |______ _____ __|__ | \_| __|__ | +;_______________________________________________________________________________ + +; cal _runindicoff ;this is after level selection (run from yas1 or restart) +; cal _flushallmenus ;so this stuff should already be done earlier or by yas + ld (SpSave),sp + + im 1 + ld a,$D4 + ld h,a + ld l,0 ;ld hl,$D400 + ld d,a + ld e,1 ;ld de,$D401 + ld b,e + ld c,l ;ld bc,$0100 + dec a ;ld a,$D3 + ld (hl),a + ldir + ld hl,int_handler + ld d,a + ld e,a ;ld de,$D3D3 + ld bc,int_end-int_handler + ldir + inc a ;ld a,$D4 + ld i,a + im 2 ;...it *does* work ;) + res 2,(iy+13) ;appAutoScroll ld a,r ld (Seed),a @@ -685,12 +713,6 @@ setdeflevels: add hl,de ;next dnz setdeflevels -;_______________________________________________________________________________ -; _______ _____ ______ _______ _____ __ _ _____ _______ -; | | | | | |_____/ |______ | | \ | | | -; | | | |_____| | \_ |______ _____ __|__ | \_| __|__ | -;_______________________________________________________________________________ - ;--- trig tables --------------------------------------------------------------- ld hl,trigtable ;I believe this @@ -804,8 +826,8 @@ dispoptionmenu: dispomenusets: #ifdef spprotect ld a,(gamecar) - rra ;and _datasingl - jp nc,LetsGetThisPartyOn ;SP -> start game + and _datasingl + jp nz,LetsGetThisPartyOn ;SP -> start game #endif cal clrold @@ -1047,7 +1069,7 @@ notselect cp K_EXIT jp z,ExitNoStats cp K_MORE - jp z,restart + jp z,Start psh af cal menupos cal loadgamecar @@ -1369,9 +1391,8 @@ enternameloop: ld (_penCol),hl pop hl psh hl - ld (ix),0 + ld (ix),a ;clroldcustom -> a=0 cal __vputs - ld (ix),' ' ld a,'_' cal __vputmap nokeypressed: @@ -1390,6 +1411,7 @@ backspace: dec ix jr enternameloop continue: + ld d,0 cp K_ENTER jr z,nameentered cp K_EXIT @@ -1398,8 +1420,7 @@ continue: dec (hl) ;(namelength) jr z,nameentered ld hl,chartable-1 - ld e,a - ld d,0 + ld e,a ;d=0 add hl,de ld a,(hl) or a @@ -1419,9 +1440,9 @@ chartable: ;("!@#$%,0" also used in _D_HL_DECI) .db $D9,"-PKFA6'" ;on|sto|,|x2|ln|log|graph|alpha .db "54321*",-5,$D0 ;F5|F4|F3|F2|F1|2nd|exit|more -nameentered: +nameentered: ;d=0 pop ix ;stringbegin - ld (ix+8),0 ;end mark + ld (ix+8),d ;end mark jp DisplayMenu ;_______________________________________________________________________________ @@ -1590,8 +1611,8 @@ OhMyGodItsALabel: ;pj34r my coding skillz ex (sp),hl ;pop \ psh leveldata psh hl ;psh loadgamecar ld a,(gamecar) - and _datalink - jr z,_StartLevel + rra ;and _datalink + jr nc,_StartLevel ;--- link ---------------------------------------------------------------------- @@ -1746,7 +1767,7 @@ teamset: ld l,(hl) ld h,0 ld a,(gamecar) - rla + rla ;and _dataPmult ld a,h ;(Left)=256 jr nc,setscorelimit ld a,l @@ -1774,29 +1795,32 @@ Nextlevel: inc hl ;location of ending-code jp (hl) ;go there ("call") donextlevel: - ld bc,gametype - ld a,(bc) + ld de,gametype + ld a,(de) or a ;gamesingle psh af - cal nz,skiplvltitle + jr nz,customnrpeas +;--sp-- + inc de + ld a,(de) ;gamecar + rla ;prepare a + rlc (hl) ;bit 7 of (hl)... + rra ;...to bit 7 of (gamecar) + rrc (hl) ;restore (hl) + ld (de),a ld a,(hl) - and 127 - jr nz,setleft -customleft =$+1 + and 127 ;actual #peas + jr setnrpeas +;--!sp-- +customnrpeas: + cal skiplvltitle ld a,0 -setleft: +customleft =$-1 + +setnrpeas: ld (Left),a inc a ld (lefttotal),a - dec a - xor (hl) ;bit (hl),7 - inc bc ;gamecar - ld a,(bc) - jr z,leftloaded - or 128+32 -leftloaded: - ld (bc),a - inc de inc hl ld de,Speed ld a,0 @@ -1989,22 +2013,30 @@ leveldone: psh hl ; >> levelp new cal forceshowstats + ld a,(gamecar) + rla ;and _dataPmult + cal c,multnewpea ;a=0 + rla ;and _datafood + cal nc,NewPea +nofood: + ld bc,(worm1+pos) + cal DisplayField + #ifdef readymask ld hl,$FC70 - ld d,%10101010 - ld c,56 + ld de,57*256+%10101010 maskloop: - ld a,d - xor %11111111 - ld d,a + ld a,e + cpl + ld e,a ld b,$10 maskline: ld a,(hl) - or d + and e ld (hl),a inc hl dnz maskline - dec c + dec d jr nz,maskloop #endif #ifdef readytext @@ -2021,15 +2053,6 @@ maskline: res 3,(iy+5) #endif - ld a,(gamecar) - rla ;bit __bitPmult,a - cal c,multnewpea ;a=0 - rla ;bit __bitfood,a - cal nc,NewPea -nofood: - ld bc,(worm1+pos) - cal DisplayField - ld b,startdelay ReadyDelay: halt @@ -2147,7 +2170,7 @@ CheckExit: rla ;=$17 (c=EXIT-key) ;or$A7 (c=0) jp c,GameLoop - jp Exit ;jr? + jr Exit ;--- pause menu ---------------------------------------------------------------- @@ -2423,8 +2446,8 @@ hilevelcheckdone: inc de ld a,(de) ;gamecar - rra ;and _datasingl - jr c,hiscorecheckdone ;no SP + and _datasingl + jr z,hiscorecheckdone ;no SP checkhiscore: cal loadhiscoreposinahl ;cf=0 (and) cal _SET_ABS_SRC_ADDR ;from ahl (lvlfile) @@ -2570,8 +2593,8 @@ DoesWormTailEqualsWormHead: jr nz,removewormloop ;head=tail/size=0 ld a,(gamecar) - rra ;and _datasingl - jr nc,savetailpos + and _datasingl + jr nz,savetailpos ld (ix+grow+1),a ;=0 ld a,0 growsize =$-1 @@ -2644,8 +2667,8 @@ inputcall: jr z,inlink ;input by link cal inkeys ;input by keys ld a,(gamecar) - and _datalink - ret z ;no link + rra ;and _datalink + ret nc ;no link ld c,l ;send our keys jp Qsend inlink: @@ -2769,7 +2792,10 @@ drawworm: inc hl ld (hl),b inc hl - cal resbit + ;(resbit) + ld a,h + and (ix+storepos) + ld h,a ld (ix+head),l ld (ix+head+1),h @@ -2798,7 +2824,10 @@ removetailbit: inc hl ld b,(hl) inc hl - cal resbit + ;(resbit) + ld a,h + and (ix+storepos) + ld h,a psh hl cal res4pixels ;rm last bit pop hl @@ -2964,12 +2993,11 @@ sel_otherpea: jr c,hitflag ;no peas hit: ld a,e ;peek a (that's x86asm for pop\push ;) - bit 1,a ;%10 = carrying flag? + bit 1,a ;%1O = carrying flag? jr z,_wormdead ;if not just die - xor %11 ;drop flag - ld (ix+reserv),a + and %1 ;which flag? ld hl,drawctfpea1 ;restore #1 - jr z,nottheotherflag ;which flag? (=and %1) + jr nz,nottheotherflag inc hl ;ld hl,drawctfpea2 inc hl ;restore #2 nottheotherflag: @@ -2982,14 +3010,16 @@ hitflag: ;correct pea hit xor %11 ;invert flag taken + ownflag ld (ix+reserv),a and %10 ;just returned? - psh af ;safe z-flag psh bc ;safe position + psh af ;safe z-flag cal DrawPea ;remove - ld e,20 ;flag captured+returned - cal z,IncScore - pop bc pop af + pop bc ret nz ;flag taken: continue game ;drawworm + ld e,20 ;flag captured+returned + psh bc + cal IncScore + pop bc ld a,3 ;draw delay ld (drawctfpea1),a ;redraw.. ld (drawctfpea2),a ;..both flags @@ -3012,7 +3042,7 @@ hitworm: PeaY =$-2 PeaX =$-1 cal chkpeahit - jr nc,_wormdead + jp nc,wormdead ;--- take pea ------------------------------------------------------------------ @@ -3076,12 +3106,12 @@ chkpeahit: ;bc=ownpos;hl=peapos (destr:ad) ;--- misc ---------------------------------------------------------------------- checkhitlapline: - ld a,(peaspos) ;63 + ld a,(peaspos) ;63 usually sub b ;x==63 jr z,nextlaphalf - inc a - ret nz -nextlaphalf: + inc a ;(more checkin' since wormies just have those _huge_ heads ;) + ret nz ;x!=62 +nextlaphalf: ;x==62|63; a=0 ld a,(peaspos+1) ;yline cp c ;ypos ld a,1 @@ -3108,21 +3138,15 @@ checklap: ; | | \_ |_____| |_____ ______| ;_______________________________________________________________________________ -releasekeys: - halt +releasekeys: ;---------->promise me you'll never let go... + halt ;-------------------->i won't let go.... ld a,%10000000 ;all key-masks out (1),a - in a,(1) + in a,(1) ;--------------->i'll never let go..... inc a ;cp %11111111 (no keys pressed) jr nz,releasekeys ;keep waitin cal GET_KEY ;clear buffer - ret - -resbit: - ld a,h - and (ix+storepos) - ld h,a - ret + ret ;--------------------->*die* (we are VICTORIOUS! muha) randompos: ld b,a @@ -3131,7 +3155,6 @@ Random: ;(2..b+2) Seed =$+1 add a,0 ld (Seed),a - and %01111110 cp b jr nc,Random add a,2 @@ -3155,11 +3178,14 @@ mmldir5: wormdead: pop hl ;< x=0 ld d,a ;d=x-xx add hl,bc ;h=x+xx; l=y+yy ld e,l ;e=y+yy @@ -3972,6 +4005,8 @@ circledraw: ;destr:de ld a,l sub c ;a=y again sub c + jr nc,$+3 ;y y=0 ld l,a ;l=y-yy ld e,l ;e=l=y-yy cal drawline ;(h-b,l-c)-(h+b,l-c) @@ -4157,8 +4192,8 @@ receivenewpeaoverlink: ret sendnewpeaoverlink: ld a,(gamecar) - and _datalink - ret z ;no link + rra ;and _datalink + ret nc ;no link ld a,(worm1+left) or a jr z,receivenewpeaoverlink @@ -4357,6 +4392,7 @@ wtPicture: ;title .db %00011111,%11101111,%11110000,%00111111,%10000111,%00000001,%10000000,%00000011,%11111111,%11110000,%00111110,%00011110,%00010111,%01011101,%10010101,%01100101 .db %00001111,%10000011,%11100000,%00011111,%00000011,%00000001,%10000000,%00000000,%11111111,%11100000,%00000000,%00000000,%11100101,%01010101,%01000110,%01010011 +#ifdef coolzgfx wtWormy: ;g/o .db %00000110,%00111000,%00000000,%00111100,%00001111,%10001110,%00111100,%01111000,%00001100,%11011000,%11100011,%10000000,%00000000,%11111100,%00111000,%00000000 .db %00011001,%01000110,%11100000,%11000010,%00011100,%11011111,%01111110,%11111000,%00011110,%11011101,%11110111,%11000000,%00111111,%00000011,%01000110,%11100000 @@ -4365,10 +4401,8 @@ wtWormy: ;g/o .db %01001100,%00011000,%00000000,%00000100,%00011000,%11011111,%01100010,%11001100,%00110011,%01101101,%10000111,%11000001,%00011100,%00111000,%00011000,%10000010 .db %01010010,%00100100,%01100000,%00011000,%00011111,%11011011,%11101110,%11111100,%00011111,%01111000,%11110110,%11100000,%11000000,%11000110,%00101001,%10000010 .db %01100001,%11000011,%10011111,%11100000,%00001111,%10001001,%11001100,%01111000,%00001110,%00110000,%01100110,%01100000,%00111111,%00000001,%11000110,%01111100 - ;.db %00000000,%00000001,%10000000,%00000000,%00001111,%10000000 - -#ifndef coolzgfx +#else txtGO: .db 5,5,5,5,5," GAME OVER ",$CF,$CF,$CF,$CF,$CF,0 #endif @@ -4480,13 +4514,13 @@ worm4set: .dw worm4p .db %11111101,0,K_PLUS,K_ENTER worm4name: .db "JIM ",0 -_datasingl = %00000001 ;singleplayer=0 (=hiscore+keep_length+nextlevel) +_datalink = %00000001 ;linkplay (1!) _datafoodl = %00000010 ;left=0 limit -_datalink = %00000100 ;linkplay (1!) +_datasingl = %00000100 ;singleplayer=1 (=hiscore+keep_length+nextlevel) _dataPctf = %00001000 ;ctf peas=1 __bitPctf = 3 _datatime = %00010000 ;time incs score (timematch) -;reserved %00100000 ;for future use +_datadecs = %00100000 ;decrease score on death=1 _datafood = %01000000 ;food present=0 (6!) _dataPmult = %10000000 ;multiple peas=1 (no _datafood) (7!) @@ -4499,30 +4533,30 @@ _dataPmult = %10000000 ;multiple peas=1 (no _datafood) (7!) ; | | | | | | Úturn speed (8=def) ; | | | | | | | Úscore limit (0=none) gamesingle = 0 ; | | | | | | | | -datasingle:.db %00000010,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives) +datasingle:.db %00100110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives) gamepeas = 1 -datapeas: .db %00000000,1,1,1,-1,126,8, 0 ;Peaworm (SP; 1 live, 127 growth) +datapeas: .db %00100100,1,1,1,-1,126,8, 0 ;Peaworm (SP; 1 live, 127 growth) gametron = 2 -datatron: .db %01010000,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth) +datatron: .db %01110100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth) gamedeathm = 3 -datadeathm:.db %01000001,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth) +datadeathm:.db %01100000,3,2,1,-1,42, 8, 0 ;Deathmatch (3 lives, 50 growth) gamefoodm = 4 -datafoodm: .db %00000001,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score) +datafoodm: .db %00100000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score) gamemfoodm = 5 -datamfoodm:.db %11000011,0,2,1,-1,-1, 8,10 ;MuchFoodmatch (10 peas) +datamfoodm:.db %11100010,0,2,1,-1,-1, 8,10 ;MuchFoodmatch (10 peas) gametimem = 6 -datatimem: .db %01010001,1,2,1,-1, 0, 8, 0 ;Timematch (1 live, cont.growth) +datatimem: .db %01110000,1,2,1,-1, 0, 8, 0 ;Timematch (1 live, cont.growth) gamerace = 7 -datarace: .db %01000001,0,2,1,-1,-1, 8,10 ;Race (100 score) +datarace: .db %01000000,0,2,1,-1,-1, 8,10 ;Race (100 score) gamectf = 8 -datactf: .db %01001001,0,6,1,-1,-1, 8,10 ;CTF (100 score) +datactf: .db %01001000,0,6,1,-1,-1, 8,10 ;CTF (100 score) gametype: .db 0 ;last gamemode gamecar: ;made before needed (not saved) saveend:;--- -startdelay = 17 +startdelay = 42 rspawndelay = 31 maxnamesize = 8+1