From: Mischa Poslawsky Date: Thu, 3 Jan 2002 21:30:14 +0000 (+0100) Subject: wormy 0.97.103 X-Git-Url: http://git.shiar.nl/wormy.git/commitdiff_plain/bf4b72fa8be434aad2c0415684c8625ae8df77a7 wormy 0.97.103 --- diff --git a/wormy.z80 b/wormy.z80 index ad95960..26d374f 100644 --- a/wormy.z80 +++ b/wormy.z80 @@ -1,23 +1,40 @@ -; Title : Wormy -; Version : 96% (0.96.C24) -; Release Date : UUHHhhh... soon?!? -; Filename : wormy.86p (5kb) -; Author(s) : Shiar -; 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) -; Other games by author(s) : Nemesis beta -; Additional Credits to : Matthew Shepcar (wrote original Peaworm, end'98) -; Jonah Cohen (helped writing worm) +; ÜÛÛÝ ÜÜÜÜ +; ÛÛÛß ÛÛÛÛÝ +; ÛÛÛ ßÛÛÛ ÞÛÛÜ +;ÞÛÛ ÜÛÛÛÜ ÜÜÛÛÛÛÜÜ ÜÛÛÛÛ ÜÛÛÜ ÜÛÛÜ ÞÛÛ ÛÛÛÛÛ +;ÛÛÝ ÛÛÛÛÛÛÛ ÜÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÜ ÛÛ ÛÛÛ ÛÛÛ +;ÛÛ ÛÛß ßÛÛ ÞÛÛßß ßÛÛÛ ÛÛÛß ÛÛÝ ÛÛß ÛÛÛÛ ßÛÛ ÛÛÝ ÞÛÛÝ ÞÛÛ +;ÛÛ ÛÛ ÛÛ ÛÛ Ü ÛÛÝ ÞÛÛÝ ÞÛÛ ÛÛÛÛÛÛ ÛÛÝ ÛÛÛ ÛÛÛ ÛÛ +;ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÞÛÛ ÛÛÛ ÛÛÝ ÛÛÛß ÞÛÛ ßÛÛ ÛÛÛ ÞÛÛÛ ÛÛ +;ÛÛ ÛÛÝ ÞÛÛ ÛÛ ÛÛ ÛÛ ÛÛÝ ÛÛÝÞÛÛÝ ÛÛÝ ÛÛ ÛÛÛÛÛÛß ÛÛ +;ÛÛ ÞÛÛ ÛÛÝ ÞÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÞÛÛ ÛÛÝ ÛÛÝ ßÛÛÛß ÞÛÛ +;ÛÛÝ ÛÛÜ ÜÛÛ ÛÛÝ ÛÛ ÛÛ ÛÛÝ ÛÛ ÞÛÛÝ ÞÛÛÝ ÛÛÝ ÛÛÝ +;ÞÛÛ ÛÛÛÛÛ ÞÛÛ ÛÛÝ ÞÛÛ ÛÛÝ ÛÛ ßÛÛÜÜÛÛß ÛÛÛ ÞÛÛ +; ÛÛÛ ÛÛÛ ÛÛÝ ÞÛÛ ÛÛÝ ÛÛÛ ÛÛÝ ßÛÛÛÛß ÞÛÛ ÛÛÛ +; ÛÛÛÜ ÜÛÛÛÛÛÜ ÜÛÛÛ ÛÛÝ ÛÛÛ ÞÛÛÝ ÛÛÝ ÛÛÛÜÜ ÜÛÛÛ +; ÛÛÛÛÛÛÛß ßÛÛÛÛÛÛÛ ÞÛÛÜÜÛÛÛÝ ÛÛÛ ÞÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÝ +; ßÛÛÛß ÛÛÛÛÝ ßÛÛÛÛÛß ÛÛ ÛÛÝ ßÛÛÛÛÛÛÛÛÛß +; +; Version : 97% (0.97.13) +; Release Date : UUHHhhh... soon?!? +; Author(s) : Shiar +; 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) +; 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 (80898 bytes) 1234 ;----------------------------- ;----------- TO-DO ----------- ;----------------------------- -; 96% = DONE +; 97% = DONE ; 1% * misc (bugs, &&&, pollish, &&, &) +; * score >9 dispay ; * mem at worm #4 (still 12 bytes or so.. or more? or less?) ; * look at init-z in line routine again ; * LINK @@ -26,6 +43,8 @@ ;100% = bugs fixed + levels done +; arrow to offscreen peas +; multiple peas in sp level ;>110%: sound, startpos (?) ;>120%: coop (DON'T COUNT ON IT) @@ -49,6 +68,7 @@ #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 +multpeas ;#define intlevels ;internal levels ;#define readytext ;displays "prepare" before level starts @@ -108,12 +128,12 @@ worm4 = $AC5D ;-AC77 (1F) balls = $AC7C ;-ACFF (3x43d) SinCosTable = $AD00 ;-AE00 (4*40) turn10 = $AE01 ;-AE01 (1) (counter) -peaspos = $AE02 ;-AE05 (4) (peas) +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) +;program = $D748 ;-EFFF (186D+4A) ;6327 worm4p = $F000 ;-F3FF (400) %11110O00 leveldata = $F400 ;-FA70 (<=671) ;can you believe i actually left $269 bytes of memory unused?!? @@ -131,6 +151,7 @@ DispBuffer = $BC00 ;(10x57d) @game #else DispBuffer = $FC70 #endif +lefttotalb = $AFFF ;----------------------------- ;------- program start ------- @@ -141,11 +162,9 @@ DispBuffer = $FC70 start: ;turn back NOW! nop ;and so it begins... jp Start - ld bc,42 - .org $-1 ;3y3 M 1337! - .dw WormTxt - .dw WormIcon -WormTxt: + ld bc,$5242 + rst 10h + .dw WormIcon ld d,a ld c,a ld d,d @@ -155,21 +174,21 @@ WormTxt: ld a,c jr nz,$+$55 ld c,b - .dw 16713 - .db %1010010 + .dw 16713 + .db %1010010 jr nz,$+47 dec l - .db " 96% C24",0 + .db " 97% .13",0 WormIcon: - .db 8,2 - .db %00000000,%00111100 - .db %00000000,%01010010 - .db %00000000,%01100001 - .db %01100011,%10011001 - .db %10010100,%01101001 - .db %10011001,%00011001 - .db %01000010,%11000001 - .db %00111100,%00111110 + .db 8,2 + .db %00000000,%00111100 + .db %00000000,%01010010 + .db %00000000,%01100001 + .db %01100011,%10011001 + .db %10010100,%01101001 + .db %10011001,%00011001 + .db %01000010,%11000001 + .db %00111100,%00111110 levelhead = 'w' levelhead2 = 95 ;wormy levels header = "95" @@ -291,10 +310,10 @@ searchcomplete: #endif cp (ix+3) ;1st=255 jp z,ExitNoStats ;->no lvls - psh ix ;offset cp (ix+6) ;2nd=255 jr z,loadlevel1 ;->1 lvl levelselectmenu: ;load next page + psh ix ;offset ld a,-2 ld (availevels),a cal _clrWindow @@ -335,6 +354,7 @@ displevel: jr dispnextlevel loadlevel1: + psh ix pop hl ld b,-2 jr loadlevel @@ -439,12 +459,12 @@ loadlevel: cal _Get_Word_ahl ld (leveldataSize),de - ld d,8 ;counter + ld d,9 ;counter ld bc,datalevels cal loadgametype ld (hilvlposa),a ;singleplayer levels ld (hilvlposhl),hl - ld d,4 + ld d,5 cal loadgametype cal _SET_ABS_SRC_ADDR ;levelsstart @@ -524,11 +544,9 @@ DisplayMenu: ;---draw menu--- ld hl,$FC00+$3E0 ;(*,62) cal hr dispmainmenu: - ld hl,Gametype - ld a,(hl) + ld a,(Gametype) dec a ;will be inced @changegame - and 7 - ld (hl),a + cal changedgame ld hl,changegame ;dispmenusets ;mainMenu psh hl ;jump here after ret ld hl,txtMenu @@ -804,6 +822,17 @@ select: ;2nd/enter dec a ;6th: controls jp z,changekeys jp LetsGetThisPartyOn ;otherwise + +changenrworms: + cal change4spOnly + ld a,(hl) ;hl=nrworms + inc a + cp 5 + jr nc,mainMenu ;may not be >4 +changednrworms: + ld (hl),a + jr _dispmenusets ;mainMenu + notselect cp K_EXIT jp z,ExitNoStats @@ -859,15 +888,6 @@ bchangecurworm: jr nz,changedcurworm ;save >0 jr mainMenu -changenrworms: - cal change4spOnly - ld a,(hl) ;hl=nrworms - inc a - cp 5 - jr nc,mainMenu ;may not be >4 -changednrworms: - ld (hl),a - jr _dispmenusets ;mainMenu changenrwormsInit: ld a,(Gametype) cp 3 @@ -907,7 +927,12 @@ changegame: jr z,changegame jr dispmenusets ;mainMenu changedgame: - and 7 ;mod 8 + cp 9 + jr c,changedgameok + sub 255-8 ;-1 -> 8 + jr nc,changedgameok + xor a ;9 -> 0 +changedgameok: ld (Gametype),a cal getnrlevels xor a @@ -1227,7 +1252,7 @@ hlatlevel: ;d must be 0 add a,a ;nc add a,e add a,a ;8->2bytes - add a,24+1 ;go to datalevels + add a,28+1 ;go to datalevels ld e,a ;=de sbc hl,de ;datalevels cal _ldHLind ;ld hl,(hl) @@ -1370,7 +1395,7 @@ OhMyGodItsALabel: ;pj34r my coding skillz ld a,0 gameCar =$-1 rra ;and _datalink - jp nc,StartLevel ;&&&jr + jr nc,_StartLevel ;--------- link ------------ @@ -1435,6 +1460,7 @@ setclient: ex de,hl ld b,168 cal sendstuff +_StartLevel: jr StartLevel sendstuff: psh de @@ -1517,6 +1543,14 @@ StartLevel: inc hl ld l,(hl) ld h,0 + ld a,(gameCar) + rla + ld a,0 ;(Left)=256 + jr nc,setscorelimit + ld a,l + ld l,h +setscorelimit: + ld (customleft),a cal _HLTIMES10 ;hl=10*(hl) ld (scorelimit),hl @@ -1542,8 +1576,25 @@ donextlevel: or a ;gamesingle psh af cal nz,skiplvltitle - ld de,Left - ldi + ld a,(hl) + and 127 + jr nz,setleft +customleft =$+1 + ld a,0 +setleft: + ld (Left),a + inc a + ld (lefttotal),a + dec a + xor (hl) ;bit (hl),7 + ld 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 customspeed =$-1 @@ -1773,11 +1824,14 @@ maskline: #endif ld a,(gameCar) - and _datafood - jr z,nofood - ld ix,worm1 + bit _bitfood,a + jr nz,nofood +; ld ix,worm1 cal NewPea + xor a nofood: + rla ;bit _bitmultpeas,a + cal c,multnewpea ld bc,(worm1+pos) cal DisplayField @@ -2501,22 +2555,28 @@ Hitworm: ld a,(gameCar) ld h,a #ifdef optdie - and _datadie - cal z,checkhitotherworm +; if race - originally + cal checkhitotherworm ld a,h #endif - and _datamultpeas ;&&bit + and _datactfpeas ;&&bit jr nz,chkctfpeas ld a,h + and _datamultpeas ;&&bit + jp nz,chkmultpeas + ld a,h and _datafood - jp z,WormDead ;no food + jp nz,WormDead ;no food ld hl,0 PeaY =$-2 PeaX =$-1 cal chkpeahit jp nc,WormDead +pickpea: cal DrawPea ;remove pea + cal NewPea +pickpea_: ld a,(ix+grow) add a,15 peagrowth =$-1 @@ -2524,17 +2584,16 @@ peagrowth =$-1 jr nc,wormset2grow inc (ix+grow+1) wormset2grow: - cal NewPea ld hl,Left - dec (hl) + dec (hl) ;dec left before display psh af ld e,10 cal IncScore pop af jp nz,Drawworm ;continue - ld a,(gameCar) - and _datafoodl - jp z,Drawworm +; ld a,(gameCar) ;(Left)>256 +; and _datafoodl +; jp z,Drawworm ld a,(Gametype) or a jp nz,Exit ;stack restored @@ -2617,6 +2676,34 @@ hitflag: ;correct pea hit ld (drawctfpea2),a ;..both flags jr Drawworm +chkmultpeas: + ld de,peaspos-1 + ld hl,lefttotalb +lefttotal =$+1 + ld (hl),0 +chkmultpealoop: + ex de,hl + inc hl + ld e,(hl) + inc hl + ld d,(hl) + ex de,hl + psh de + cal chkpeahit + pop de + jr c,pickmultpea + ld hl,lefttotalb + dec (hl) + jr nz,chkmultpealoop + jp WormDead +pickmultpea: + ld a,247 + ld (de),a + dec de + ld (de),a + cal DrawPea + jp pickpea_ + ;----------------------------- nextotherwormbit: @@ -2987,6 +3074,22 @@ tryDrawPea: ;hl=peapos;bc=dopea jr z,DrawPea ret +multnewpea: + ld de,peaspos + ld a,(Left) + ld b,a +multpealoop: + psh bc + psh de + cal NewPea + pop de + ld hl,PeaY + ldi + ldi + pop bc + dnz multpealoop + ret + NewPea: ld a,(FieldWidth) add a,127-4 @@ -3703,7 +3806,7 @@ drawfatline: ; jp drawline ;A lot like Scabby's line routine in Wonderworm (dunno whether he wrote it -;himself.) I did make a few optimizations and commented the thing. +;himself tho.) I did make a few optimizations and commented the thing. ;A nice routine (also Bresenham), but for Wormy not perfect since really ;large lines (>128 pixels in length or something) won't be flawless. @@ -3946,13 +4049,13 @@ LevelDef: LevelDefM: .db "Empty Arena",0 - .db 8,4,15,15,0,0 + .db 5,4,15,15,0,0 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64 .db 128,57 .db 0 .db "Fast Fun :))",0 - .db 8,0,18,12,5 + .db 8+128,0,18,12,5 .db %1110000,%10001000,%10001000,%10001000,%1110000,0 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64 .db 128,57 @@ -4053,9 +4156,10 @@ txtGame1: .db "Peaworm",0 txtGame2: .db "Tron",0 txtGame3: .db "Deathmatch",0 txtGame4: .db "Foodmatch",0 -txtGame5: .db "Timematch",0 -txtGame6: .db "Race",0 -txtGame7: .db "CTF" ;,0 +txtGame5: .db "Multifoodmatch",0 +txtGame6: .db "Timematch",0 +txtGame7: .db "Race",0 +txtGame8: .db "CTF" ;,0 posGame: .db 0 .db txtGame1-txtGame @@ -4065,6 +4169,7 @@ posGame: .db 0 .db txtGame5-txtGame .db txtGame6-txtGame .db txtGame7-txtGame + .db txtGame8-txtGame txtNone: .db "None",0 txtDef: .db "Default",0 @@ -4107,47 +4212,51 @@ txtGO: .db 5,5,5,5,5," GAME OVER ",$CF,$CF,$CF,$CF,$CF,0 #ifdef intlevels datalevels: .dw LevelDef, LevelDefM .dw LevelDefT,LevelDefM - .dw LevelDefM,LevelDefM + .dw LevelDefM,LevelDefM,LevelDefM .dw LevelDefR,LevelDefC -nrlevels: .db 0,3,1,3,3,3,3,1 ;=defaults +nrlevels: .db 2,3,1,3,3,3,3,3,1,0 ;=defaults #else -datalevels: .dw 0,0,0,0,0,0,0,0 -nrlevels: .dw 0,0,0,0 +datalevels: .dw 0,0,0,0,0,0,0,0,0 +nrlevels: .dw 0,0,0,0,0 #endif -_datalink = %0000001 ;linkplay -_datafoodl = %0000010 ;left=0 limit -_datasingl = %0000100 ;singleplayer=1 (=hiscore+keep_length+nextlevel) -_datamultpeas = %0001000 ;multiple peas=1 -_datatime = %0010000 ;time incs score (timematch) -_datafood = %0100000 ;food present -_datadie = %1000000 ;worm dies on impact -;reserved %10000000 ;for future use - -savestart: ; Úgame info (see above) - ; | Úlives (0=unlimited) - ; | | Únrworms (can be altered by user) - ; | | | Úlevel (reset to 1 at startup) - ; | | | | Úspeed/delay (-1=def) - ; | | | | | Úgrow speed (-1=none; 0=continuous) - ; | | | | | | Úturn speed (8=def) - ; | | | | | | | Úscore limit (0=none) -gamesingle = 0 ;used | | | | | | | | -datasingle: .db %1100110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives) +_datalink = %00000001 ;linkplay +_datafoodl = %00000010 ;left=0 limit +_datasingl = %00000100 ;singleplayer=1 (=hiscore+keep_length+nextlevel) +_datactfpeas = %00001000 ;ctf peas=1 +_datatime = %00010000 ;time incs score (timematch) +_datafood = %00100000 ;food present=0 +_bitfood = 5 +_datamultpeas = %10000000 ;multiple peas=1 (no _datafood) +_bitmultpeas = 7 +;reserved %01000000 ;for future use + +savestart: ; Úgame info (see above) + ; | Úlives (0=unlimited) + ; | | Únrworms (can be altered by user) + ; | | | Úlevel (reset to 1 at startup) + ; | | | | Úspeed/delay (-1=def) + ; | | | | | Úgrow speed (-1=none; 0=continuous) + ; | | | | | | Úturn speed (8=def) + ; | | | | | | | Úscore limit (0=none) +gamesingle = 0 ; | | | | | | | | +datasingle: .db %01000110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives) gamepeas = 1 -datapeas: .db %1100100,1,1,1,-1,-1, 8, 0 ;Peaworm (SP; 1 live) +datapeas: .db %01000100,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 %1000000,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth) +datatron: .db %01110100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth) +gamedeathm = 3 +datadeathm: .db %01100000,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 -datatimem: .db %1010000,1,2,1,-1, 0, 8, 0 ;Timematch (tron, 100 score) -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,10 ;CTF (100 score) +datafoodm: .db %01000000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score) +gamemfoodm = 5 +datamfoodm: .db %11100010,0,2,1,-1,-1, 8,10 ;MuchFoodmatch (10 peas)) +gametimem = 6 +datatimem: .db %01110000,1,2,1,-1, 0, 8, 0 ;Timematch (tron, 100 score) +gamerace = 7 +datarace: .db %01100000,0,2,1,-1,-1, 8,10 ;Race (100 score) +gamectf = 8 +datactf: .db %01001000,0,4,1,-1,-1, 8,10 ;CTF (100 score) worm1set: .dw worm1p,worm1p .db %11110111,1,-01,K_RIGHT,K_LEFT