From: Mischa Poslawsky Date: Sun, 23 Apr 2000 17:07:42 +0000 (+0200) Subject: worm 0.89.0423 X-Git-Url: http://git.shiar.nl/wormy.git/commitdiff_plain/1ef9903729b6d0785ae56e2422120b030f3ef1f6 worm 0.89.0423 - bonus score for completing a level, extra live for each 1000 points --- diff --git a/worm.z80 b/worm.z80 index fef817c..d5b88d1 100644 --- a/worm.z80 +++ b/worm.z80 @@ -1,5 +1,5 @@ ; Title : Worm -; Version : 0.986 +; Version : 89% ; Release Date : april 2000??? ; Filename : worm.86p (4kb) ; Author(s) : Shiar @@ -16,17 +16,14 @@ ;----------- TO-DO ----------- ;----------------------------- -; 86% = DONE +; 89% = DONE -; 1% * levelfile select ; 3% * linkplay ; 1% * titlescreen ; 2% * make linkplay available for all gametypes (not just deathmatch) -; 1% * two worms collide with heads -> both should die ; * game types: ; 1% * ctf: take enemy flag (right-bottom) and return to your flag (left-top) ; 1% * domination?: take control points by running over them and hold them -; 1% * name change + other options ; * complete readme (+custom level info) ; 2% * ... (pollish, &&&) @@ -49,8 +46,9 @@ _SHRACC = $4383 _SHLACC = $438B -_divHLby10 = $4044 -_divAby10 = $4DAF +_divHLby10 = $4044 ;hl=hl/10 +_divAby10 = $4DAF ;a=a/10 +_HLTIMES10 = $41BF ;hl=hl*10 _cphlde = $403C _clrWindow = $4A86 ;clear screen _asapvar = $D6FC ;own name (worm) @@ -61,6 +59,7 @@ _ldHLind = $4010 ;ld hl,(hl) _swapt_ = $45F3 ;ex_ahl_bde _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 _SET_ABS_SRC_ADDR = $4647 ;set source for mm.ldir =ahl _LOAD_ABS_SRC_ADDR = $5209 ;ahl = mm.ldir source @@ -68,6 +67,10 @@ _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 _RAM_PAGE_1 = $47E3 ;set $8000+ to page 1 +_RAM_PAGE_7 = $47F3 +_PTEMP_END = $D29A +_load_ram_ahl = $462F ;ahl->page+hl +_writeb_inc_ahl = $5567 ;ld (ahl),c ;----------------------------- ;------- data storage ------- @@ -76,13 +79,15 @@ _RAM_PAGE_1 = $47E3 ;set $8000+ to page 1 leveldata = $EA00 ;size< $400 ScrBuffer = $8100 ;size=$2000 (32x256) ;->mod$800 +templevels = $BC00 ;size= 3*$10 DispBuffer = $BC00 ;size= $390 (16x57) SinCosTable = $B500 ;size= $100 (4x64) worm1 = $B400 -worm2 = $B42A -worm3 = $B454 -worm4 = $B47E ;-B4A8 +worm2 = $B41E +worm3 = $B43C +worm4 = $B45A +ball1 = $B478 resbit = 2 ;and%11111011 worm1p = $B000 ;%10110000 -$B3FF @@ -90,7 +95,7 @@ worm2p = $B800 ;%10111000 -$BBFF worm3p = $F000 ;%11110000 -$F3FF worm4p = $A800 ;$E800=%11101000 ;$D748+$1000+ -WormVersion = 086 +WormVersion = 088 ;----------------------------- ;------- program start ------- @@ -106,7 +111,7 @@ start: .dw WormIcon WormMsg: - .db "WORM by SHIAR -- pre-beta 86%",0 + .db "WORM by SHIAR -- pre-beta 89%",0 WormIcon: .db 9,2 .db %10010110,%01101111 @@ -119,9 +124,8 @@ WormIcon: .db %11101111,%00001111 .db %11000011,%10000000 -levelfile: - .db 7,"wormlvl" -levelhead = 'T' +levelhead = '8' +levelhead2 = '9' ;worm levels header = "89" Start: ld (SpSave),sp @@ -129,25 +133,64 @@ Start: cal _flushallmenus cal _clrLCD - ld hl,levelfile-1 - rst 20h ;_ABS_MOV10TOOP1 - rst 10h ;_FINDSYM - ret c ;not found - ex de,hl - ld a,b ;cal _ex_ahl_bde - cal _AHL_PLUS_2_PG3 + cal _RAM_PAGE_7 + ld hl,$BFFF ;VAT start + ld bc,templevels +searchloop: + ld de,(_PTEMP_END+1) + or a ;nc + sbc hl,de ;hlahl - ld (hisaveposa),a - ld (hisaveposhl),hl +levelloaded: + ld (hiscrposa),a + ld (hiscrposhl),hl cal _RAM_PAGE_1 ;&&& res 2,(iy+13) ;appAutoScroll @@ -219,30 +338,37 @@ NegativeSineWave: ;---------- menu ------------- ;----------------------------- + ld a,1 + ld (curlevel),a DisplayMenu: - ld a,2 - ld (nrworms),a -gomainMenu: cal _clrWindow ld hl,txtWelcome cal _puts - ld de,$0205 + ld de,$0207 + ld (_curRow),de + cal _puts ;--- + dec e ;$0206 + ld (_curRow),de + cal _puts ;Level + dec e ;$0205 ld (_curRow),de - cal _puts ;txtOptions + cal _puts ;Worms: 2 dec e ;$0204 ld (_curRow),de ld hl,(CURtxtGame) - cal _puts + cal _puts ;Singleplayer xor a + cal menudraw + jr howmanyworms mainMenu: cal menucall jr nz,notselect select: ld a,b - or a - jr nz,gooptionsMenu - jp LetsGetThisPartyOn + dec a ;2nd item + jp z,changeworms + jp LetsGetThisPartyOn ;1/3/4 notselect cp K_EXIT jp z,ExitNoStats @@ -250,47 +376,36 @@ notselect ld a,b jr nz,mainMenu or a - jr z,Variation + jr z,changegame + dec a + jr z,changenrworms + dec a + jp nz,LetsGetThisPartyOn -gooptionsMenu: - cal _clrWindow - ld hl,txtWelcome - cal _puts - ld hl,txtLevel - ld de,$0205 - ld (_curRow),de - cal _puts ;txtLevel - dec e ;$0204 - ld (_curRow),de - cal _puts ;txtWorms - ld a,(nrworms) - add a,'0' - cal _putc - xor a -optionsMenu: - cal menucall - jr nz,notopselect -opselect: - ld a,b - or a - jr nz,changelevel -changeworms: - ld hl,nrworms - inc (hl) - ld a,4 - cp (hl) - jr nc,gooptionsMenu - ld (hl),2 - jr gooptionsMenu changelevel: - jr optionsMenu -notopselect: - cp K_EXIT - jr z,gomainMenu - ld a,b - jr optionsMenu + ld hl,Gametype + ld d,0 + ld e,(hl) + ld hl,nrlevels + add hl,de + ld d,(hl) ;max level for sel.game + ld a,1 +curlevel =$-1 + inc a + cp d + jr c,changedlevel + ld a,1 +changedlevel: + ld (curlevel),a +dispcurlevel: + ld hl,$0806 + ld (_curRow),hl + cal showA + jr mainMenu -Variation: +changegame: + ld a,1 + ld (curlevel),a ld a,0 Gametype =$-1 ld hl,txtGame2 @@ -306,53 +421,223 @@ okilydokily: ld (CURtxtGame),hl cal _puts ld (NEXTtxtGame),hl - ld a,b - jp mainMenu +howmanyworms: + ld a,(Gametype) + cp 2 + ld a,1 + jr c,oneworm +nrworms =$+1 + ld a,2 +oneworm: + jr dispnrworms ;jr mainMenu -menucall: - psh af - ld hl,$0004 - ld (_curRow),hl - ld a,' ' - cal _putc - ld hl,$0005 - ld (_curRow),hl - cal _putc - pop af - psh af - ld h,0 - add a,4 - ld l,a +changenrworms: + ld a,(Gametype) + cp 2 + jr c,mainMenu ;type 0/1 + ld hl,nrworms + ld a,(hl) + inc a + cp 5 + jr c,changednrworms + ld a,1 +changednrworms: + ld (hl),a +dispnrworms: + ld hl,$0905 ld (_curRow),hl - ld a,'*' - cal _putc -menukeys: + cal showA + ld a,(curlevel) + jr dispcurlevel ;mainMenu + +menucall: + psh bc +menuwaitkey: halt \ halt cal GET_KEY or a - jr z,menukeys + jr z,menuwaitkey pop bc ;pop a as b cp K_UP - jr nz,notup -updown: - ld a,b - xor 1 - ld b,a - inc a ;nz - ret -notup: + cal z,menuup cp K_DOWN - jr z,updown + cal z,menudown cp K_ENTER ret z cp K_SECOND ret ;z=select +menupos: + ld a,b + add a,4 + ld h,0 + ld l,a + ld (_curRow),hl + ret +menuclr: + cal menupos + ld a,' ' + jp _putc +menudown: + cal menuclr + inc b + jr menuupdown +menuup: + cal menuclr + dec b +menuupdown: + ld a,b + and %11 ;4=0;-1=3 +menudraw: + ld b,a + cal menupos + ld a,'*' + jp _putc ;a=K_STO + +changeworms: + cal _clrWindow + ld a,(Gametype) + cp 2 + ld a,1 + jr c,wormnrname + ld a,(nrworms) +wormnrname: + add a,a ;2x + ld e,a + add a,a ;4x + add a,a ;8x + add a,a ;16x + add a,e ;18x + ld e,a + ld d,0 + ld ix,worm1name-18 + add ix,de + ld a,maxnamelength + cal entername + ld (ix),0 + jp DisplayMenu + +entername: + ld (namelength),a +enternameloop: + ld a,'_' + cal _putc + ld hl,_curCol + dec (hl) +nokeypressed: + halt + cal GET_KEY + or a + jr z,nokeypressed + + 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 + cp K_EXIT + ret z + + ld hl,namelength + dec (hl) + ret z + + ld hl,chartable + ld e,a + ld d,0 + add hl,de + ld a,(hl) + or a + jr z,nokeypressed + + ld (ix),a + cal _putc + inc ix + cal waitnokeypressed + jr enternameloop + +waitnokeypressed: + halt + cal GET_KEY + or a + jr nz,waitnokeypressed + ret + +namelength: + .db 0 +chartable: + .db 0,"!<>^",0,0,0,0 + .db 0,"xtoje0",0 ;enter..clear + .db " wsnid9",0 ;(-)..custom + .db "zvrmhc8",0 ;dot..del + .db "yuqlgb7*" ;0..xvar + .db 0,"-pkfa6'" ;on..alpha + .db "54321.",0,0 ;F5..more + +;--proc + +skiplevel: ;@hl - destr:ab - alter:hl + inc hl + inc hl + inc hl + inc hl ;skip 4 + ld b,(hl) ;spritesize + inc b +skipsprite: + inc hl + dnz skipsprite + ld b,(hl) ;balls + inc b + inc b ;skip 6 + ld a,c + and _datasingl + jr nz,skipworms + inc b ;multiplayer lvl + inc b + inc b ;skip other 3 worms (9 bytes) +skipworms: + ld a,b + add a,a + add a,b + ld b,a ;3x(balls+2) +skipballs: + inc hl + dnz skipballs + cal skiplines ;lines +skiplines: ;boxes + ld a,(hl) ;lines/boxes + add a,a + add a,a + inc a + ld b,a ;4x(hl)+1 +skiplb + inc hl + dnz skiplb + ret + ;----------------------------- ;-------- start game --------- ;----------------------------- LetsGetThisPartyOn: + ld a,$17 ;no exit + ld (CheckExit),a ;set exit state + ld hl,gamesdata ld a,(Gametype) ld e,a @@ -365,13 +650,13 @@ LetsGetThisPartyOn: ld e,8 ;=de add hl,de - ld b,a ;psh af + ld c,a and _datasingl jr z,notsingle ld a,1 ld (nrworms),a notsingle: - ld a,b ;pop af \push + ld a,c and _datascore ld de,$FF64 ;virt.infinate jr z,setscorelimit @@ -380,8 +665,18 @@ setscorelimit: ld (scorelimit),de cal _ldHLind ;ld hl,(hl) - psh hl - ld a,b ;pop af + ld a,(curlevel) + ld (Level),a + ld d,a ;begin level +skiplevelloop: + dec d ;levels to skip + jr z,levelsskipped + cal skiplevel + jr skiplevelloop +levelsskipped: + + psh hl ;1st level + ld a,c and _datalink jr z,GameOver @@ -432,8 +727,6 @@ GameOver: ld (worm2+score+1),hl ld (worm3+score+1),hl ld (worm4+score+1),hl - ld a,l - ld (Level),a ld hl,worm1set+4 ld de,worm1+lives ;&&&>* @@ -474,8 +767,8 @@ waitsomemore: pop hl ;show end msg or smtn ld bc,Exit - psh bc ;where to go afterwards - inc hl ;location of ending-code + psh bc ;where to go afterwards + inc hl ;location of ending-code jp (hl) ;go there ("call") nextlevel: ldi @@ -495,7 +788,6 @@ nextlevel: inc hl or a jr z,defaultsprite - ld (sprsize),a ld d,h ld e,l ;ld de,hl ld c,a @@ -503,8 +795,10 @@ nextlevel: add hl,bc ;hl=behind sprite jr setsprite defaultsprite: + ld a,defsprsize ld de,peasprite setsprite: + ld (sprsize),a ld (spritepos),de ld a,(hl) @@ -512,9 +806,13 @@ setsprite: ld (nrballs),a or a jr z,toobad_noballs - ld de,ballpos - ldi - ldi + ld c,a + add a,a + add a,c + ld c,a + ld b,0 + ld de,ball1 + ldir toobad_noballs: #ifdef 0 @@ -776,7 +1074,7 @@ Delay: jr nz,Delay NoDelay: - cal handlethatneatlittleball + cal handlethoseneatlittleballs ld ix,worm1 ld a,(nrworms) @@ -797,54 +1095,24 @@ HandleKeys: ld a,%10111111 out (1),a in a,(1) - rla ;[MORE]? - jr c,NotPaused + rla ;MORE? + jr c,CheckExit ld bc,$0103 out (c),b halt ;pause/off ld b,11 out (c),b -NotPaused: - rla ;[EXIT]? +CheckExit: + rla ;=$17 (c=EXIT-key) + ;or$A7 (c=0) jp c,GameLoop jr Exit WormDead: ld a,2 ld (flashtime),a - - ld h,(ix+tail+1) - ld l,(ix+tail) - ld d,(ix+head+1) - ld e,(ix+head) - jr DoesWormTailEqualsWormHead ;chk4 size=0 -removewormloop: - ld c,(hl) - inc hl - ld b,(hl) - inc hl - res resbit,h - psh hl - cal res4pixels - pop hl - inc (ix+grow) -DoesWormTailEqualsWormHead: - cal _cphlde - jr nz,removewormloop - - ld a,(gameCar) - and _datasingl - jr nz,safewormsizedone - ld a,0 -beginsize =$-1 - ld (ix+grow),a -safewormsizedone: - - ;de=ix+head - ld (ix+tail+1),d - ld (ix+tail),e - ld a,50 + ld a,respawndelay ld (ix+delay),a thislevel =$+1 @@ -868,6 +1136,9 @@ thislevel =$+1 ld a,(gameCar) and _datalivel ret z + ld a,$A7 ;exit@end of turn + ld (CheckExit),a ;set exit state + ret ;finish turn Exit: ld sp,0 ;pop all @@ -889,8 +1160,8 @@ CURtxtGame =$-2 xor a ld (_curCol),a - ld b,2 -nrworms =$-1 + ld a,(nrworms) + ld b,a ld hl,worm1+died displayWormStats: psh bc @@ -941,6 +1212,24 @@ NoLinkIndic: pop bc dnz displayWormStats + ld a,(Gametype) + or a ;singleplayer (0) only + jr nz,hilevelcheckdone +checkhilevel: + ld hl,nrlevels + ld a,(Level) + inc a + cp (hl) + jr c,hilevelcheckdone + ld (hl),a ;save local + ld c,a + ld a,0 +hilvlposa =$-1 + ld hl,0 +hilvlposhl =$-2 ;save external + cal _writeb_inc_ahl ;ld (ahl),c +hilevelcheckdone: + ld a,(gameCar) and _datasingl jr z,hiscorecheckdone @@ -1018,16 +1307,14 @@ ExitNoStats: loadhiscoreposinahl: ld a,(Gametype) - dec a - jr nz,externalhiscoresavepos - ld a,0 - ld hl,hipeaworm - ret + or a externalhiscoresavepos: ld a,0 -hisaveposa =$-1 +hiscrposa =$-1 ld hl,0 -hisaveposhl =$-2 +hiscrposhl =$-2 + ret z ;(Gametype)=0 + cal _INC_PTR_AHL ret ;----------------------------- @@ -1082,6 +1369,41 @@ inputcall: jr inlink respawncheck: + cp respawndelay-1 + jr nz,unnamedlabel +removeworm: + ld h,(ix+tail+1) + ld l,(ix+tail) + ld d,(ix+head+1) + ld e,(ix+head) + jr DoesWormTailEqualsWormHead ;chk4 size=0 +removewormloop: + ld c,(hl) + inc hl + ld b,(hl) + inc hl + res resbit,h + psh hl + cal res4pixels + pop hl + inc (ix+grow) +DoesWormTailEqualsWormHead: + cal _cphlde + jr nz,removewormloop + + ld a,(gameCar) + and _datasingl + jr nz,safewormsizedone + ld a,0 +beginsize =$-1 + ld (ix+grow),a +safewormsizedone: + + ;de=ix+head + ld (ix+tail+1),d + ld (ix+tail),e + +unnamedlabel: cp 1 ld h,a jr nz,saverespawncounter @@ -1211,16 +1533,24 @@ peagrowth =$-1 ld a,(gameCar) and _datafoodl jr z,still_alive_not_dead + ld a,(Gametype) + or a + jp nz,Exit ;stack restored + ld hl,Level ld a,(hl) inc (hl) + ld l,a ;hl=Level + ld h,0 + add hl,hl + add hl,hl + cal _HLTIMES10 + ex de,hl + cal IncScore ;score+(40*level) pop hl ; << call pop hl ; << call pop hl ; << levelp new - ld a,(gameCar) - and _datanextl - jp nz,StartLevel - jp Exit + jp StartLevel ;----------------------------- @@ -1342,34 +1672,73 @@ ResPixel: ;---------- ball ------------- ;----------------------------- -handlethatneatlittleball: +handlethoseneatlittleballs: ld a,0 nrballs =$-1 or a ret z -ballpos =$+1 - ld bc,$0503 + + ld hl,ball1 + ld b,a +handleballs + psh bc + psh hl + ld c,(hl) + inc hl + ld b,(hl) + inc hl + ld d,(hl) + cal handleball + dec c + pop hl + ld (hl),c + inc hl + ld (hl),b + inc hl + ld (hl),d + inc hl + pop bc + dnz handleballs + ret + +handleball: cal res4pixels dec c - ld e,b + ballxmove: - inc b ;=%000100 dec=%000101 + bit 0,d ;1=L; 0=R + jr z,ballright +ballleft: + dec b cal checkballhit - jr z,ballxdone - ld b,e - ld hl,ballxmove - cal letsmovetheotherway -ballxdone: - ld e,c + jr z,ballymove + inc b ;undo + res 0,d ;go right + jr ballymove +ballright: + inc b + cal checkballhit + jr z,ballymove + dec b ;back + set 0,d ;>left + ballymove: - inc c ;=%001100 dec=%001101 + bit 1,d ;1=up; 0=down + jr z,balldown +ballup: + dec c cal checkballhit jr z,balldone - ld c,e - ld hl,ballymove - cal letsmovetheotherway + inc c + res 1,d ;go down + jr balldone +balldown: + inc c + cal checkballhit + jr z,balldone + dec c + set 1,d ;up balldone: - ld (ballpos),bc set4pixels: ;@(b,c) cal SetPixel @@ -1391,10 +1760,12 @@ letsmovetheotherway: ret checkballhit: + psh de ld d,0 cal chk4pixels xor a cp d + pop de ret ;----------------------------- @@ -1457,25 +1828,41 @@ spritepos =$-2 ;----------- score ----------- +_divHLby1000: + psh hl + ld b,3 +divideagain: ;3x + cal _divHLby10 + dnz divideagain + ld a,l ;a=hl/1000 + pop hl + ret + HuntingTimeScore: .db $dd,$7d ;ld a,lx cp worm2&255 ret z ;=worm#2 dec (ix+reserv) ret nz - ld de,10 + ld hl,10 IncScore: ld h,(ix+score+1) ld l,(ix+score) + cal _divHLby1000 + ld c,a add hl,de + cal _divHLby1000 + cp c + jr z,scorecommon ;hl/1000 not increased + inc (ix+lives) jr scorecommon DecScore: ;&&& ld h,(ix+score+1) ld l,(ix+score) or a sbc hl,de - ret c + jr c,showstats ;<0=0 scorecommon: ld (ix+score+1),h ld (ix+score),l @@ -2209,8 +2596,10 @@ TrigPrecalc: txtWelcome: .db "Welcome to Worm!! ", .db "by Shiar",0 -txtOptions: .db "Options",0 -txtGame: .db "Singleplayer",0 ;0 + .db "Have fun!",0 ;4th menu item + .db "Level 00",0 ;3rd + .db "Worms: 0",0 ;2nd +txtGame: .db "Singleplayer",0 ;0 (1st) txtGame2: .db "Peaworm ",0 ;1 .db "Deathmatch",0 ;2 .db "Foodmatch ",0 ;3 @@ -2257,58 +2646,54 @@ datalevels: .dw LevelDef, LevelDef .dw LevelDefM,LevelDefM .dw LevelDefM,LevelDefM .dw LevelDefM,LevelDefM +nrlevels: .db 1,1,1,1,1,1,1,1 worm1set: .dw worm1p,worm1p .db 3,0,%01111110,%10,%100 ;< > -worm1name: .db "Worm #1 ",0 +worm1name: .db "Left ",0 worm2set: .dw worm2p,worm2p .db 3,0,%00111111,%10000,%1000 ;f1 f2 -worm2name: .db "Worm #2 ",0 +worm2name: .db "Right ",0 worm3set: .dw worm3p,worm3p .db 3,0,%01011111,%10,%100 ;sto , -worm3name: .db "Worm #3 ",0 +worm3name: .db "Top ",0 worm4set: .dw worm4p,worm4p .db 3,0,%01111101,%10,%1 ;enter + -worm4name: .db "Worm #4 ",0 +worm4name: .db "Bottom ",0 hipeaworm: .dw 0 end: -;sprsize = 7 -;peasprite: .db %00111000 -; .db %01110100 -; .db %11111010 -; .db %11111110 -; .db %11111110 -; .db %01111100 -; .db %00111000 - -sprsize: .db 5 -peasprite: .db %01110000 - .db %11101000 - .db %11111000 - .db %11111000 - .db %01110000 - - ;set: -heading = 0 ;level* -pos = 2 ;level* -pos2 = 4 ;level -grow = 6 ;level -died = 8 ;game -score = 9 ;game -delay = 11 ;game - -head = 12 ;level -tail = 14 ;level -lives = 16 ;game -reserv = 17 ;loop +defsprsize = 4 +sprsize: .db 4 +peasprite: .db %01100000 + .db %11110000 + .db %11110000 + .db %01100000 + + ;set: +heading = 0 ;level* +pos = 2 ;level* +pos2 = 4 ;level +grow = 6 ;level +died = 8 ;game +score = 9 ;game +delay = 11 ;game + +head = 12 ;level +tail = 14 ;level +lives = 16 ;game +reserv = 17 ;loop ;race:lap ;hunt:time -input = 18 ;& -left = 19 ;& -right = 20 ;& -name = 21 ;game +input = 18 ;& +left = 19 ;& +right = 20 ;& +name = 21 ;game +wormsize = 30 + +respawndelay = 40 +maxnamelength = 9 ;----------------------------- ;----------- end ------------- diff --git a/wormlvl.z80 b/wormlvl.z80 index fd1c51a..1eeda2e 100644 --- a/wormlvl.z80 +++ b/wormlvl.z80 @@ -1,43 +1,46 @@ #include "asm86.h" #include "ti86asm.inc" - .org $EA00-20 + .org $E9E3-16 ;$E9E3-[name size] - .db 'T',0 ;worm header (Test version) - .dw hiscore-single ;leveldata size + .db "89" ;worm header (version .88) + .db 16,"Worm LevelPack I" ;level name + .dw hiscore-single ;leveldata size levelsdata: - .dw single ;points to singleplayer levels - .dw 0 ;...peaworm level (0 = no levels/empty level) - .dw deathmatch ;...deathmatch - .dw foodmatch ;...foodmatch - .dw linkmatch ;...linkmatch - .dw hunting ;...hunting - .dw race ;...race - .dw ctf ;...capture the flag + .dw single ;points to singleplayer levels + .dw 0 ;...peaworm level (0 = no levels/empty level) + .dw deathmatch ;...deathmatch + .dw foodmatch ;...foodmatch + .dw linkmatch ;...linkmatch + .dw hunting ;...hunting + .dw race ;...race + .dw ctf ;...capture the flag + .db 2,2,3,2 ;max. choosable level+1 for each gametype + .db 2,2,2,2 ;so: 2 = level 1 only; 4 = level 1 to 3 available single: - .db 5,4,15 ;peas in level, delay (0=fastest), pea-growth - .db 15,5 ;begin_size, sprite size (0=use default sprite) - .db %01110000 ;sprite + .db 5,4,15 ;peas in level, delay (0=fastest), pea-growth + .db 15,5 ;begin_size, sprite size (0=use default sprite) + .db %01110000 ;sprite .db %10001000 .db %10001000 .db %10001000 .db %01110000 - .db 0 ;balls (0 or 1) - .db 0,2,63 ;your start d (0=down,$80=up), y, x - .db 128,57 ;field width (128-255), height (57-255) - .db 0,0 ;no additional lines, boxes + .db 0 ;balls (see below) + .db 0,2,63 ;your start d (0=down,$80=up), y, x + .db 128,57 ;field width (128-255), height (57-255) + .db 0,0 ;no additional lines, boxes .db 8,4,15,15,0,0 .db $40,14,2 .db 128,57 - .db 1 ;one line: - .db 28,28,100,28 ;line coords: x1,y1,x2,y2 + .db 1 ;one line: + .db 28,28,100,28 ;line coords: x1,y1,x2,y2 .db 0 .db 9,4,15,15,0,0 @@ -48,9 +51,9 @@ single: .db 28,41,100,41 .db 0 - .db 4,3,15,10,0,1 ;...bouncing ball - .dw $20F ;ball begin position - .db 0,2,63 + .db 4,3,15,10,0,1 + .db 2,4,0 ;1 bouncing ball, begin y, x, direction (%11=left+up) + .db 0,2,124 .db 128,57 .db 2 .db 28,14,100,41 @@ -96,7 +99,7 @@ single: .db 0 .db 12,3,15,15,0,0 - .db $40,4,0 + .db $40,2,2 .db 128,90 .db 6 .db 20,16,54,16 @@ -108,7 +111,7 @@ single: .db 0 .db 8,2,15,15,0,0 - .db $C0,72,48 + .db $C0,67,48 .db 128,128 .db 13 .db 34,56,56,34 @@ -126,7 +129,7 @@ single: .db 91,106,115,106 .db 0 - .db 255 ;end marker + .db 255 ;end marker ;Code to run when all levels are done: ;Worm waits a second, then screen is cleared and this code will be run. @@ -134,27 +137,32 @@ single: ;If you don't want an ending, simply put . ld hl,endtext - call _puts ;display text - jp _getkey ;wait for a key - ;jp ? = call ? + ret + call _puts ;display text + jp _getkey ;wait for a key + ;jp ? = call ? + ret endtext: .db " Congratulations!!",0 deathmatch: .db 8,5,15,31,0,0 - .db $40,28,2 ;begin stats for each player - .db $C0,28,125 ;player 2 moves left - .db $00,2,63 ;player 3 moves down - .db $80,54,63 ;player 4 moves up + .db $40,28,2 ;begin stats for each player + .db $C0,28,125 ;player 2 moves left + .db $00,2,63 ;player 3 moves down + .db $80,54,63 ;player 4 moves up .db 128,57 .db 0 - .db 4 ;4 boxes: - .db 16,12,48,12 ;x1,y1,x2,ysize(y2-y1) - .db 80,12,112,12 ;... + .db 4 ;4 boxes: + .db 16,12,48,12 ;x1,y1,x2,ysize(y2-y1) + .db 80,12,112,12 ;... .db 16,34,48,12 .db 80,34,112,12 + .db 8,4,18,15,0,0 + .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64 + .db 128,57 + .db 0,0 + foodmatch: ctf: @@ -193,7 +201,8 @@ race: hiscore: - .dw 0 ;singleplayer hiscore will be saved here + .dw 0 ;singleplayer hiscore will be saved here + .dw 0 ;same for peaworm hiscore .end