From: Mischa Poslawsky Date: Sun, 22 Apr 2001 12:46:06 +0000 (+0200) Subject: wormy/wormedit 0.94.1422 X-Git-Url: http://git.shiar.nl/wormy.git/commitdiff_plain/8f37ce5d3f4fb337115fbe7bd092fbc5b66b0085 wormy/wormedit 0.94.1422 --- diff --git a/wormedit.pas b/wormedit.pas index ce8b3fc..016174a 100644 --- a/wormedit.pas +++ b/wormedit.pas @@ -30,15 +30,15 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] = OBJTYPE:ARRAY[0..4]OF STRING[8] = ('NONE','LINE','FAT LINE','BAR','CIRCLE'); - ENDTYPE:ARRAY[-1..0]OF STRING[8] = - ('MESSAGE','NONE'); + ENDTYPE:ARRAY[0..1]OF STRING[8] = + ('NONE','MESSAGE'); HEAD86S:STRING[53] = ('**TI86**'+#$1A+#$A+#0+ {HEADER} - 'Levelfile for Worm 0á93 made with WormEdit'); {COMMENT} + 'Levelfile for Worm 0á94 made with WormEdit'); {COMMENT} - HEADEDIT = ('WormEditá93'+#0+'LVL'); - HEADVERSION = 93; + HEADEDIT = ('WormEditá94'+#0+'LVL'); + HEADVERSION = 94; B:RECORD HEAD:ARRAY[1..15]OF CHAR; @@ -51,6 +51,7 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] = SPRITE:ARRAY[1..8]OF BYTE; ENDTYPE:INTEGER; ENDDATA:STRING[255]; + HINAME:ARRAY[1..3]OF CHAR; END {B} = (HEAD:HEADEDIT; VERSION:HEADVERSION; @@ -64,7 +65,9 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] = 11110000 11110000 01100000} - ENDTYPE:0); + ENDTYPE:1; + ENDDATA:''; + HINAME:'WOR'); LVLPOS:BYTE = 1; OBJPOS:BYTE = 1; @@ -79,6 +82,7 @@ VAR I,I2:WORD; LTEMP:ONELEVEL; FILENAME:STRING[8]; + LVLDISP:BYTE; PROCEDURE MAINTITLE; BEGIN @@ -89,7 +93,7 @@ BEGIN TEXTCOLOR(1); WRITE('>ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ'); WINDOW(41,2,41,25); TEXTCOLOR(7); TEXTBACKGROUND(0); WRITE(CC('³',23)); WINDOW(1,25,80,25); TEXTBACKGROUND(1); CLRSCR; - GOTOXY(75,1); TEXTCOLOR(0); WRITE('v0.93'); TEXTBACKGROUND(0); + GOTOXY(75,1); TEXTCOLOR(0); WRITE('v0.94'); TEXTBACKGROUND(0); END; {MAINTITLE} PROCEDURE CIRCLE(X,Y,Z,COL:BYTE); @@ -169,10 +173,12 @@ END; {HELPBAR} PROCEDURE DISPLEVELS; BEGIN - WINDOW(42,3,80,13); TEXTBACKGROUND(0); CLRSCR; + WINDOW(42,3,80,13); TEXTCOLOR(7); TEXTBACKGROUND(0); CLRSCR; IF B.LTOTAL<1THEN WRITELN('NONE PRESENT')ELSE FOR II:=LVLPOS TO MIN(B.LTOTAL,LVLPOS+9)DO BEGIN - WRITE(II); TEXTCOLOR(3); WRITELN(': '+L[II].NAME); TEXTCOLOR(7); + IF LVLDISP=1THEN WRITE(II) {CONTINOUS} + ELSE IF II>B.LSINGLE THEN WRITE(II-B.LSINGLE)ELSE WRITE(II); {SEPERATE} + TEXTCOLOR(3); WRITELN(': '+L[II].NAME); TEXTCOLOR(7); END; {DISP LEVELS} END; {DISPLEVELS} @@ -181,23 +187,25 @@ VAR EDITOK:SHORTINT; BEGIN EDITOK:=0; REPEAT WINDOW(39,1,39,1); GOTOXY(1,1); REPEAT UNTIL KEYPRESSED; C:=READKEY; - IF C=' 'THEN EDITOK:=10; {10} - IF(C>='1')AND(C<=CHR(EDITMENUMAX+48))THEN EDITOK:=ORD(C)-48; {1..<=9} - IF(C=#27)OR(C='-')OR(C='+')THEN EDITOK:=-1; {EXIT} + IF C=' 'THEN EDITOK:=10 {10} ELSE + IF(C>='1')AND(C<=CHR(EDITMENUMAX+48))THEN EDITOK:=ORD(C)-48 {1..<=9} ELSE + IF(C=#27)OR(C='-')OR(C='+')THEN EDITOK:=-1 {EXIT} ELSE + IF UPCASE(C)='H'THEN HELPBAR(HELPPAGE) ELSE IF C=#0THEN BEGIN C:=READKEY; - IF(C=#80)AND(LVLPOS1)THEN BEGIN DEC(LVLPOS); DISPLEVELS; END; {DOWN} + IF HELPPAGE=5THEN BEGIN + IF(C=#80)AND(LVLPOS1)THEN BEGIN DEC(LVLPOS); DISPLEVELS; END {UP} ELSE + END; {LEVELS DISPED} IF C=#59THEN HELPBAR(HELPPAGE); END; {EXTENDED} - IF UPCASE(C)='H'THEN HELPBAR(HELPPAGE); UNTIL EDITOK<>0; EDITMENU:=EDITOK; END; {EDITMENU} FUNCTION COMPSIZE:WORD; BEGIN - I:=$32+B.SPRSIZE+ORD(B.NAME[0])+2; - IF B.LFROM[2]>0THEN I:=I+((1+B.LTO[2]-B.LFROM[2])SHL 1); - IF B.LFROM[3]>0THEN I:=I+((1+B.LTO[3]-B.LFROM[3])SHL 1); + I:=$32+B.SPRSIZE+ORD(B.NAME[0])+5; + IF B.LFROM[2]>0THEN I:=I+((1+B.LTO[2]-B.LFROM[2])*5); + IF B.LFROM[3]>0THEN I:=I+((1+B.LTO[3]-B.LFROM[3])*5); FOR II:=1TO B.LTOTAL DO BEGIN INC(I,L[II].SIZE); FOR I4:=1TO L[II].NROBJ DO IF L[II].OBJ[I4].TYP<=0THEN DEC(I,5); @@ -213,7 +221,7 @@ BEGIN TEXTCOLOR(15); TEXTBACKGROUND(1); CASE BAR OF 1:BEGIN - WRITE('LEVELS',' ':39-6); DISPLEVELS; + WRITE('LEVELS',' ':39-6); LVLDISP:=1; DISPLEVELS; END; {1:SINGLVLS} 2:BEGIN WRITE('LEVEL OBJECTS',' ':39-13); TEXTCOLOR(7); TEXTBACKGROUND(0); @@ -249,12 +257,7 @@ BEGIN WRITE(' BYTES'); END; {4:FILE} 5:BEGIN - WRITE('LEVELS',' ':39-6); TEXTCOLOR(7); TEXTBACKGROUND(0); - IF B.LTOTAL<1THEN WRITELN('NONE PRESENT')ELSE - FOR II:=1TO B.LTOTAL DO BEGIN - IF II>B.LSINGLE THEN WRITE(II-B.LSINGLE)ELSE WRITE(II); - TEXTCOLOR(3); WRITELN(': '+L[II].NAME); TEXTCOLOR(7); - END; {DISP LEVELS} + WRITE('LEVELS',' ':39-6); LVLDISP:=2; DISPLEVELS; END; {5:LEVELS} END; {BAR} WINDOW(1,2,40,24); @@ -329,7 +332,7 @@ BEGIN TEXTCOLOR(7); WRITE('8: CTF '); TEXTCOLOR(3); IF B.LCTF=0THEN WRITE('(NO LEVELS)')ELSE WRITE('(',B.LCTF,')'); - III:=EDITMENU(8,0); + III:=EDITMENU(8,5); IF III=1THEN BEGIN B.LFROM[1]:=INPUTINT('ENTER LEVELS TO SKIP','USE THIS TO TEMPORARILY REMOVE THE FIRSTFEW LEVELS', 0,0,B.LSINGLE-1); INC(B.LFROM[1]); @@ -749,7 +752,8 @@ BEGIN END; {} END; {DELETE} 5:BEGIN - INC(B.LSINGLE); INC(B.LTOTAL); II:=B.LSINGLE; + INC(B.LSINGLE); INC(B.LTOTAL); II:=B.LSINGLE; + IF B.LFROM[1]=0THEN B.LFROM[1]:=1; FOR I:=B.LTOTAL DOWNTO II+1DO L[I]:=L[I-1]; L[II].NAME:='Level #'+NR(II); L[II].PEAS:=8; L[II].DELAY:=4; L[II].GROWTH:=15; L[II].BSIZE:=15; @@ -776,79 +780,73 @@ BEGIN UNTIL III=-1; III:=0; END; {EDITLVL} -PROCEDURE EDITDSPR; +PROCEDURE EDITSETS; BEGIN REPEAT - TITLEBAR(0,'EDIT DEFAULT SPRITE'); - TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': SPRITE SIZE '); - TEXTCOLOR(3); WRITELN('(',B.SPRSIZE,')'); - FOR I:=1TO B.SPRSIZE DO BEGIN - TEXTCOLOR(14); WRITE(I+1); TEXTCOLOR(7); WRITE(': EDIT '); TEXTCOLOR(3); - WRITELN(BYTE2STR(B.SPRITE[I],B.SPRSIZE)); - END; {DISP SPRITE} - - III:=EDITMENU(1+B.SPRSIZE,0); - IF III=1THEN BEGIN - I:=INPUTINT('ENTER THE DEFAULT SPRITE SIZE','CAN BE CHANGED PER LEVEL',1,B.SPRSIZE,8); - IF I>B.SPRSIZE THEN FOR I4:=B.SPRSIZE+1TO I DO B.SPRITE[I4]:=0; - B.SPRSIZE:=I; - END {SIZE} ELSE IF III>1THEN BEGIN - S:=INPUTSTR('ENTER NEW LINE #'+NR(III-1)+' OF SPRITE','EXAMPLE: 100101 = XúúXúX', - ZERO(BYTE2BIN(B.SPRITE[III-1]),8),8); - B.SPRITE[III-1]:=STR2BYTE(S); - END; {APP} - UNTIL III=-1; III:=0; -END; {EDITDSPR} - -PROCEDURE EDITSPEND; -BEGIN - REPEAT - TITLEBAR(0,'SINGLEPLAYER ENDING'); - TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': END TYPE '); - TEXTCOLOR(3); WRITELN(' (',ENDTYPE[B.ENDTYPE],')'); TEXTCOLOR(14); + TITLEBAR(0,'CHANGE DEFAULTS'); + TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': HISCORE NAME '); + TEXTCOLOR(3); WRITELN('(',B.HINAME,')'); + TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITE(': END TYPE '); + TEXTCOLOR(3); WRITELN('(',ENDTYPE[B.ENDTYPE],')'); CASE B.ENDTYPE OF - -1:BEGIN - WRITE('2'); TEXTCOLOR(7); WRITE(': EDIT MESSAGE'); - TEXTCOLOR(3); WRITE(' (',COPY(B.ENDDATA,1,18)); + 1:BEGIN + TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITE(': EDIT MESSAGE '); + TEXTCOLOR(3); WRITE('(',COPY(B.ENDDATA,1,18)); IF LENGTH(B.ENDDATA)>18THEN WRITELN('...)')ELSE WRITELN(')'); END; {MSG} + ELSE BEGIN TEXTCOLOR(7); WRITELN('3: CONFIGURE END'); END; {NOTN} END; {TYPE} + TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': SPRITE SIZE '); + TEXTCOLOR(3); WRITELN('(',B.SPRSIZE,')'); + FOR I:=1TO B.SPRSIZE DO BEGIN + TEXTCOLOR(14); WRITE(I+4); TEXTCOLOR(7); WRITE(': EDIT '); TEXTCOLOR(3); + WRITELN(BYTE2STR(B.SPRITE[I],B.SPRSIZE)); + END; {DISP SPRITE} - III:=EDITMENU(2,0); + III:=EDITMENU(4+B.SPRSIZE,0); CASE III OF 1:BEGIN - FOR II:=0TO 1DO WRITE(NR(II)+': '+ENDTYPE[-II]+CC(' ',40-ORD(ENDTYPE[-II,0]))); + S:=INPUTSTR('DEFAULT NAME OF HISCORES','LENGTH 3 CHARS',B.HINAME,3); + FOR I:=1TO 3DO B.HINAME[I]:=S[I]; + END; {HINAME} + 2:BEGIN + FOR II:=0TO 1DO WRITE(NR(II)+': '+ENDTYPE[II]+CC(' ',40-ORD(ENDTYPE[II,0]))); B.ENDTYPE:=INPUTINT('ENTER NEW END TYPE',S,0,0,1); - IF B.ENDTYPE=-1THEN B.ENDDATA:='Congratulations!!'; + IF B.ENDTYPE=1THEN B.ENDDATA:='Congratulations!!'; END; {TITLE} - 2:IF B.ENDTYPE=-1THEN + 3:IF B.ENDTYPE=1THEN B.ENDDATA:=INPUTSTR('ENTER NEW END MESSAGE','MAX 255 CHARS','Congratulations!!',255); + 4:BEGIN + I:=INPUTINT('ENTER THE DEFAULT SPRITE SIZE','CAN BE CHANGED PER LEVEL',1,B.SPRSIZE,8); + IF I>B.SPRSIZE THEN FOR I4:=B.SPRSIZE+1TO I DO B.SPRITE[I4]:=0; + B.SPRSIZE:=I; + END; {SPRSIZE} + ELSE IF III>4THEN BEGIN + S:=INPUTSTR('ENTER NEW LINE #'+NR(III-4)+' OF SPRITE','EXAMPLE: 100101 = XúúXúX', + ZERO(BYTE2BIN(B.SPRITE[III-4]),8),8); + B.SPRITE[III-4]:=STR2BYTE(S); + END; {SPREDIT} END; {HANDLE} UNTIL III=-1; III:=0; -END; {EDITSPEND} - +END; {EDITSETS} PROCEDURE EDITMAIN; BEGIN REPEAT TITLEBAR(4,UPCS(B.NAME)); TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITELN(': EDIT TITLE'); - TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITE(': DEFAULT SPRITE'); - TEXTCOLOR(3); WRITELN(' (',B.SPRSIZE,')'); + TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITELN(': DEFAULTS'); TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITELN(': GAME TYPES'); - TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': SP ENDING'); - TEXTCOLOR(3); WRITELN(' (',ENDTYPE[B.ENDTYPE],')'); - TEXTCOLOR(14); WRITE('5'); TEXTCOLOR(7); WRITE(': LEVELS'); + TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': LEVELS'); TEXTCOLOR(3); WRITE(' (',B.LTOTAL,')'); - III:=EDITMENU(5,3); + III:=EDITMENU(4,3); CASE III OF 1:B.NAME:=INPUTSTR('ENTER NEW TITLE FOR THIS LEVELFILE','NOTE TI-86 DISPLAYS ONLY 22 CHARS ON THEFIRST LINE', B.NAME,32); {TITLE} - 2:EDITDSPR; + 2:EDITSETS; 3:EDITGAME; - 4:EDITSPEND; - 5:EDITLVL; + 4:EDITLVL; END; {HANDLE} UNTIL III=-1; III:=0; END; {EDITMAIN} @@ -860,7 +858,8 @@ BEGIN TEXTCOLOR(15); WRITE('WARNING!! '); TEXTCOLOR(7); WRITELN('FAILED OPENING LEVEL FILE!'); WRITELN('RUNTIME ERROR #',I); HALT; END; {CAN'T OPEN} - {$I-} BLOCKREAD(F,B,SIZEOF(B)); BLOCKREAD(F,L,SIZEOF(L)); {$I+} + {$I-} BLOCKREAD(F,B,SIZEOF(B)); + FOR I:=1TO B.LTOTAL DO BLOCKREAD(F,L[I],SIZEOF(L[I])); {$I+} IF(IORESULT<>0)OR(B.HEAD<>HEADEDIT)THEN BEGIN TEXTCOLOR(15); WRITE('WARNING!! '); TEXTCOLOR(7); WRITELN('ERROR READING LEVEL FILE!'); @@ -874,7 +873,8 @@ END; {OPENFILE} PROCEDURE FILESAVE; BEGIN ASSIGN(F,FILENAME+'.LVL'); REWRITE(F,1); - BLOCKWRITE(F,B,SIZEOF(B)); BLOCKWRITE(F,L,SIZEOF(L)); CLOSE(F); + BLOCKWRITE(F,B,SIZEOF(B)); + FOR I:=1TO B.LTOTAL DO BLOCKWRITE(F,L[I],SIZEOF(L[I])); CLOSE(F); END; {FILESAVE} PROCEDURE FILECOMP; @@ -943,15 +943,17 @@ BEGIN BLOCKWRITE(FF,B.SPRSIZE,1); BLOCKWRITE(FF,B.SPRITE,B.SPRSIZE); - FOR II:=B.LFROM[1]TO B.LSINGLE DO SAVELEVEL(1); {LEVELS SINGLEPL} + IF B.LFROM[1]>0THEN + FOR II:=B.LFROM[1]TO B.LSINGLE DO SAVELEVEL(1); {LEVELS SINGLEPL} I:=255; BLOCKWRITE(FF,I,1); {END} I:=$C9; BLOCKWRITE(FF,I,1); {RET} - FOR II:=B.LSINGLE+1TO B.LSINGLE+B.LMULTI DO SAVELEVEL(4); {LEVELS MULTIPL} + IF B.LMULTI>0THEN + FOR II:=B.LSINGLE+1TO B.LSINGLE+B.LMULTI DO SAVELEVEL(4); {LEVELS MULTIPL} I:=0; I2:=1; IF B.LFROM[2]>0THEN I2:=I2+1+B.LTO[2]-B.LFROM[2]; IF B.LFROM[3]>0THEN I2:=I2+1+B.LTO[3]-B.LFROM[3]; - FOR II:=1TO I2 DO BLOCKWRITE(FF,I,2); {HI} + FOR II:=1TO I2 DO BEGIN BLOCKWRITE(FF,I,2); BLOCKWRITE(FF,B.HINAME,3); END; {HI} SEEK(FF,$37); I2:=0; I:=0; REPEAT INC(I,I2); BLOCKREAD(FF,I2,1,ISTACK); UNTIL ISTACK<>1; 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: diff --git a/wormy001.lvl b/wormy001.lvl index 2fa1335..1f5127e 100644 Binary files a/wormy001.lvl and b/wormy001.lvl differ