X-Git-Url: http://git.shiar.nl/wormy.git/blobdiff_plain/c19230bff97b89344d6e9fcec28a5a1df95a2bea..8f37ce5d3f4fb337115fbe7bd092fbc5b66b0085:/wormedit.pas 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;