-USES CRT;
+USES CRT,SHIAR;
CONST GAMETYPE:ARRAY[1..8]OF STRING[12] =
- ('SINGLEPLAYER','PEAWORM','TRON','DEATHMATCH',
- 'FOODMATCH','LINKPLAY','RACE','CTF');
+ ('SINGLEPLAYER','PEAWORM','TRON','DEATHMATCH',
+ 'FOODMATCH','LINKPLAY','RACE','CTF');
- OBJTYPE:ARRAY[0..3]OF STRING[8] =
- ('NONE','LINE','FAT LINE','BAR');
+ OBJTYPE:ARRAY[0..4]OF STRING[8] =
+ ('NONE','LINE','FAT LINE','BAR','CIRCLE');
ENDTYPE:ARRAY[-1..0]OF STRING[8] =
- ('MESSAGE','NONE');
+ ('MESSAGE','NONE');
HEAD86S:STRING[53] =
- ('**TI86**'+#$1A+#$A+#0+ {HEADER}
- 'Levelfile for Worm 0�92 made with WormEdit'); {COMMENT}
+ ('**TI86**'+#$1A+#$A+#0+ {HEADER}
+ 'Levelfile for Worm 0�93 made with WormEdit'); {COMMENT}
- HEADEDIT = ('WormEdit�92'+#0+'LVL');
- HEADVERSION = 92;
+ HEADEDIT = ('WormEdit�93'+#0+'LVL');
+ HEADVERSION = 93;
B:RECORD
- HEAD:ARRAY[1..15]OF CHAR;
- VERSION:BYTE;
- NAME:STRING[32];
- LSINGLE,LMULTI,LCTF,LTOTAL:BYTE;
- LFROM:ARRAY[1..8]OF BYTE;
- LTO:ARRAY[1..8]OF BYTE;
- SPRSIZE:BYTE;
- SPRITE:ARRAY[1..8]OF BYTE;
+ HEAD:ARRAY[1..15]OF CHAR;
+ VERSION:BYTE;
+ NAME:STRING[32];
+ LSINGLE,LMULTI,LCTF,LTOTAL:BYTE;
+ LFROM:ARRAY[1..8]OF BYTE;
+ LTO:ARRAY[1..8]OF BYTE;
+ SPRSIZE:BYTE;
+ SPRITE:ARRAY[1..8]OF BYTE;
ENDTYPE:INTEGER;
- ENDDATA:STRING[255];
+ ENDDATA:STRING[255];
END {B} =
- (HEAD:HEADEDIT;
- VERSION:HEADVERSION;
+ (HEAD:HEADEDIT;
+ VERSION:HEADVERSION;
NAME:'Custom Worm Level';
- LSINGLE:0; LMULTI:0; LCTF:0; LTOTAL:0;
- LFROM:(0,0,0,0,0,0,0,0);
- LTO:(0,0,0,0,0,0,0,0);
+ LSINGLE:0; LMULTI:0; LCTF:0; LTOTAL:0;
+ LFROM:(1,0,0,0,0,0,0,0);
+ LTO:(1,0,0,0,0,0,0,0);
SPRSIZE:4;
SPRITE:(6*16,15*16,15*16,6*16,0,0,0,0);
- {01100000
- 11110000
- 11110000
- 01100000}
- ENDTYPE:0);
+ {01100000
+ 11110000
+ 11110000
+ 01100000}
+ ENDTYPE:0);
+ LVLPOS:BYTE = 1;
+ OBJPOS:BYTE = 1;
VAR I,I2:WORD;
II,III,I4:SHORTINT;
F,FF:FILE;
L:ARRAY[1..64]OF RECORD
- NAME:STRING[32];
+ NAME:STRING[22];
SIZE:BYTE;
PEAS,DELAY:BYTE;
GROWTH,BSIZE:BYTE;
FILENAME:STRING[8];
-FUNCTION NR(VALUE:INTEGER):STRING;
+PROCEDURE MAINTITLE;
+BEGIN
+ SETTEXT; CLRSCR;
+ TEXTCOLOR(1); WRITE('���������������������������<');
+ TEXTCOLOR(14); WRITE(' WormEdit � ');
+ TEXTCOLOR(15); WRITE(' by SHIAR ');
+ 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);
+END; {MAINTITLE}
+
+PROCEDURE CIRCLE(X,Y,Z,COL:BYTE);
+VAR XX,YY,ZZ:INTEGER;
+BEGIN
+ XX:=-1; YY:=Z; ZZ:=-Z;
+ REPEAT
+ INC(XX);
+ LINE(X-XX,Y+YY,X+XX,Y+YY,COL,VGA);
+ LINE(X-XX,Y-YY,X+XX,Y-YY,COL,VGA);
+ LINE(X-YY,Y+XX,X+YY,Y+XX,COL,VGA);
+ LINE(X-YY,Y-XX,X+YY,Y-XX,COL,VGA);
+ IF ZZ>=0THEN BEGIN ZZ:=ZZ-(YY SHL 1)+2; DEC(YY); END;
+ ZZ:=ZZ+(XX SHL 1)+3;
+ UNTIL XX>=YY;
+END; {CIRCLE}
+
+PROCEDURE DISPMAP(OBJ:INTEGER);
+VAR OBJ2:INTEGER;
+PROCEDURE DISPOBJ(OBJ:INTEGER;COL:BYTE);
+VAR Y:BYTE;
+BEGIN
+ CASE L[II].OBJ[OBJ].TYP OF
+ 1:LINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2,COL,VGA);
+ 2:BEGIN
+ LINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2,COL,VGA);
+ LINE(L[II].OBJ[OBJ].X1+1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2+1,L[II].OBJ[OBJ].Y2,COL,VGA);
+ LINE(L[II].OBJ[OBJ].X1+1,L[II].OBJ[OBJ].Y1+1,L[II].OBJ[OBJ].X2+1,L[II].OBJ[OBJ].Y2+1,COL,VGA);
+ LINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1+1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2+1,COL,VGA);
+ END; {FATLINE}
+ 3:BEGIN
+ FOR Y:=L[II].OBJ[OBJ].Y1 TO L[II].OBJ[OBJ].Y1+L[II].OBJ[OBJ].Y2 DO
+ LINE(L[II].OBJ[OBJ].X1,MIN(Y,191),L[II].OBJ[OBJ].X2,MIN(Y,191),COL,VGA);
+ END; {BOX}
+ 4:CIRCLE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,COL);
+ END; {OBJECT TYPE}
+END; {DISPOBJ}
+BEGIN
+ SETMCGA;
+ LINE(0,56,255,56,8,VGA); LINE(0,113,255,113,8,VGA);
+ LINE(0,170,255,170,8,VGA); {LINE(0,227,255,227,8,VGA);}
+ LINE(127,0,127,170,8,VGA); LINE(255,0,255,170,8,VGA);
+ LINE(0,0,255,0,15,VGA); LINE(0,1,255,1,15,VGA);
+ LINE(0,2,0,190-3,15,VGA); LINE(1,2,1,190-3,15,VGA);
+ LINE(L[II].FIELDX-2,2,L[II].FIELDX-2,L[II].FIELDY-1,15,VGA);
+ LINE(L[II].FIELDX-1,2,L[II].FIELDX-1,L[II].FIELDY-1,15,VGA);
+ LINE(0,L[II].FIELDY-2,L[II].FIELDX-1,L[II].FIELDY-2,15,VGA);
+ LINE(0,L[II].FIELDY-1,L[II].FIELDX-1,L[II].FIELDY-1,15,VGA);
+ FOR OBJ2:=1TO L[II].NROBJ DO IF OBJ2<>OBJ THEN DISPOBJ(OBJ2,7);
+ IF(OBJ>0)AND(OBJ<=L[II].NROBJ)THEN DISPOBJ(OBJ,14);
+ REPEAT UNTIL READKEY<>#0;
+ MAINTITLE;
+END; {DISPMAP}
+
+FUNCTION NR(VALUE:LONGINT):STRING;
VAR NRSTR:STRING;
BEGIN
STR(VALUE,NRSTR); NR:=NRSTR;
END; {NR}
-FUNCTION EDITMENU(EDITMENUMAX:BYTE):SHORTINT;
+PROCEDURE HELPBAR(HELPPAGE:BYTE);
BEGIN
- REPEAT
- REPEAT C:=READKEY;
- UNTIL(C>='1')AND(C<=CHR(EDITMENUMAX+48))OR(C=#27);
- IF C=#27THEN EDITMENU:=-1 ELSE EDITMENU:=ORD(C)-48;
- UNTIL ORD(C)<>0;
+ WINDOW(41,14,80,24);
+ IF HELPPAGE=0THEN BEGIN
+ TEXTCOLOR(7); WRITE('�'); WINDOW(42,14,80,24); CLRSCR; EXIT;
+ END; {REMOVE}
+ TEXTBACKGROUND(1); TEXTCOLOR(7); WRITE('�'); TEXTCOLOR(15);
+ WRITE('HELP',' ':39-4); WINDOW(42,15,80,24); TEXTBACKGROUND(0); TEXTCOLOR(7);
+ CLRSCR; CASE HELPPAGE OF
+ 1:WRITE('PRESS <F1> OR <H> FOR HELP');
+ 2:WRITE('YOU UNDERSTAND EVERYTHING');
+ 3:WRITE('THIS AIN''T A BUG, IT A FEATURE!');
+ END; {TEXT TO DISPLAY}
+END; {HELPBAR}
+
+PROCEDURE DISPLEVELS;
+BEGIN
+ WINDOW(42,3,80,13); 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);
+ END; {DISP LEVELS}
+END; {DISPLEVELS}
+
+FUNCTION EDITMENU(EDITMENUMAX,HELPPAGE:BYTE):SHORTINT;
+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=#0THEN BEGIN C:=READKEY;
+ IF(C=#80)AND(LVLPOS<B.LTOTAL-9)THEN BEGIN INC(LVLPOS); DISPLEVELS; END; {DOWN}
+ IF(C=#72)AND(LVLPOS>1)THEN BEGIN DEC(LVLPOS); DISPLEVELS; END; {DOWN}
+ IF C=#59THEN HELPBAR(HELPPAGE);
+ END; {EXTENDED}
+ IF UPCASE(C)='H'THEN HELPBAR(HELPPAGE);
+ UNTIL EDITOK<>0; EDITMENU:=EDITOK;
END; {EDITMENU}
FUNCTION COMPSIZE:WORD;
COMPSIZE:=I;
END; {COMPSIZE}
-PROCEDURE EDITTITLE(BAR:SHORTINT;TITLNAME:STRING);
+PROCEDURE TITLEBAR(BAR:SHORTINT;TITLNAME:STRING);
BEGIN
- WINDOW(41,2,80,20); CLRSCR; TEXTCOLOR(15); TEXTBACKGROUND(1);
+ HELPBAR(0); WINDOW(41,2,42,2);
+ IF BAR=0THEN TEXTBACKGROUND(0)ELSE TEXTBACKGROUND(1);
+ TEXTCOLOR(7); WRITE('�'); WINDOW(42,2,80,13); TEXTBACKGROUND(0); CLRSCR;
+ TEXTCOLOR(15); TEXTBACKGROUND(1);
CASE BAR OF
1:BEGIN
- WRITE('LEVELS',' ':40-6); TEXTCOLOR(7); TEXTBACKGROUND(0);
- IF B.LTOTAL<1THEN WRITELN('NONE PRESENT')ELSE
- FOR II:=1TO B.LTOTAL DO BEGIN
- WRITE(II); TEXTCOLOR(3); WRITELN(': '+L[II].NAME); TEXTCOLOR(7);
- END; {DISP LEVELS}
+ WRITE('LEVELS',' ':39-6); DISPLEVELS;
END; {1:SINGLVLS}
2:BEGIN
- WRITE('LEVEL OBJECTS',' ':40-13); TEXTCOLOR(7); TEXTBACKGROUND(0);
+ WRITE('LEVEL OBJECTS',' ':39-13); TEXTCOLOR(7); TEXTBACKGROUND(0);
IF L[II].NROBJ<1THEN WRITELN('NONE')ELSE
- FOR I:=1TO L[II].NROBJ DO BEGIN
- WRITE(I); TEXTCOLOR(3); WRITE(': ',OBJTYPE[L[II].OBJ[I].TYP]);
- WRITE(' (',L[II].OBJ[I].X1,',',L[II].OBJ[I].Y1,')-(');
- IF L[II].OBJ[I].TYP=3THEN
- WRITELN(L[II].OBJ[I].X2,',',L[II].OBJ[I].Y1+L[II].OBJ[I].Y2,')')
- ELSE WRITELN(L[II].OBJ[I].X2,',',L[II].OBJ[I].Y2,')');
+ FOR I4:=1TO L[II].NROBJ DO BEGIN
+ WRITE(I4); TEXTCOLOR(3); WRITE(': ',OBJTYPE[L[II].OBJ[I4].TYP]);
+ IF L[II].OBJ[I4].TYP>0THEN
+ WRITE(' (',L[II].OBJ[I4].X1,',',L[II].OBJ[I4].Y1,')-(');
+ CASE L[II].OBJ[I4].TYP OF
+ 1,2:WRITELN(L[II].OBJ[I4].X2,',',L[II].OBJ[I4].Y2,')');
+ 3:WRITELN(L[II].OBJ[I4].X2,',',L[II].OBJ[I4].Y1+L[II].OBJ[I4].Y2,')');
+ 4:WRITELN(L[II].OBJ[I4].X2,')');
+ END; {TYPE}
TEXTCOLOR(7);
- END; {DISP OBJS}
+ END; {DISP OBJS}
END; {2:SINGLVLS}
3:BEGIN
- WRITE('LEVEL INFO',' ':40-10); TEXTCOLOR(7); TEXTBACKGROUND(0);
- WRITELN('LEVEL #',II,' MP #',II-B.LSINGLE);
+ WRITE('LEVEL INFO',' ':39-10); TEXTCOLOR(7); TEXTBACKGROUND(0);
+ WRITE('LEVEL #',II);
+ IF II>B.LSINGLE THEN WRITELN(' MP #',II-B.LSINGLE)ELSE WRITELN;
WRITELN('LEVEL SIZE: ',L[II].SIZE);
IF II<=B.LSINGLE THEN WRITELN('SINGLEPLAYER')ELSE FOR I:=2TO 7DO
IF(II-B.LSINGLE>=B.LFROM[I])AND(II-B.LSINGLE<=B.LTO[I])THEN
WRITELN(GAMETYPE[I]);
END; {3:LEVEL}
4:BEGIN
- WRITE(FILENAME,'.LVL',' ':36-ORD(FILENAME[0])); TEXTCOLOR(7);
+ WRITE(FILENAME,'.LVL',' ':35-ORD(FILENAME[0])); TEXTCOLOR(7);
TEXTBACKGROUND(0); WRITE('FILE VERSION: '); TEXTCOLOR(3);
WRITELN(B.VERSION); TEXTCOLOR(7); WRITE('FILE SIZE: '); TEXTCOLOR(3);
WRITE(FILESIZE(F)SHR 10); TEXTCOLOR(7); WRITELN('kB');
WRITE('COMPILED: '); TEXTCOLOR(3); WRITE(COMPSIZE); TEXTCOLOR(7);
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}
+ END; {5:LEVELS}
END; {BAR}
- WINDOW(1,2,40,20);
+ WINDOW(1,2,40,24);
TEXTBACKGROUND(1); TEXTCOLOR(15); WRITE(TITLNAME,' ':40-ORD(TITLNAME[0]));
- WINDOW(1,3,40,20); TEXTBACKGROUND(0); CLRSCR;
-END; {EDITTITLE}
+ WINDOW(1,3,40,24); TEXTBACKGROUND(0); CLRSCR;
+END; {TITLEBAR}
+
+FUNCTION INPUTSTR(ISTR,ICOM,IDEF:STRING;IMAX:BYTE):STRING;
+VAR IVAL:STRING; IOK:BOOLEAN;
+BEGIN
+ WINDOW(1,14,40,24);
+ TEXTBACKGROUND(1); TEXTCOLOR(15); WRITE('INPUT',' ':40-5);
+ WINDOW(1,15,40,24); TEXTBACKGROUND(0); CLRSCR;
+ REPEAT
+ TEXTCOLOR(7); WRITELN(ISTR); TEXTCOLOR(8); WRITELN(ICOM);
+ TEXTCOLOR(8); WRITELN('ENTER FOR DEFAULT:'); WRITELN(IDEF);
+ TEXTCOLOR(7); WRITE('> '); READLN(IVAL);
+ IF IVAL=''THEN IVAL:=IDEF;
+ IOK:=FALSE; IF ORD(IVAL[0])<=IMAX THEN IOK:=TRUE
+ ELSE BEGIN CLRSCR; WRITELN('OH NO, THAT''S TOO MUCH!'); END; {TOOLONG}
+ UNTIL IOK; INPUTSTR:=IVAL;
+END; {INPUTSTR}
+
+FUNCTION INPUTINT(ISTR,ICOM:STRING;IMIN,IDEF,IMAX:INTEGER):INTEGER;
+FUNCTION READ:INTEGER;
+VAR REI1:INTEGER; REI2:BYTE;
+BEGIN {INPUTS POSITIVE INTEGER VALUE FROM KEYBOARD}
+ REI1:=0; {VALUE} REI2:=0; {SIZE}
+ REPEAT
+ REPEAT C:=READKEY; UNTIL C<>'';
+ CASE C OF
+ #8,'+','-':IF REI2>0THEN BEGIN
+ REI1:=REI1 DIV 10; DEC(REI2); WRITE(#8+' '+#8);
+ END; {BACKSPACE}
+ '0'..'9':IF REI2<4THEN BEGIN
+ REI1:=REI1*10+ORD(C)-48; INC(REI2); WRITE(C);
+ END; {NUMBER}
+ #13:IF REI2=0THEN REI1:=-1; {ENTER}
+ END; {HANDLE INPUT}
+ UNTIL C=#13; {UNTIL ENTER PRESSED}
+ READ:=REI1;
+END; {READLN}
+VAR IVAL:INTEGER; IOK:BOOLEAN;
+BEGIN
+ WINDOW(1,14,40,24);
+ TEXTBACKGROUND(1); TEXTCOLOR(15); WRITE('INPUT',' ':40-5);
+ WINDOW(1,15,40,24); TEXTBACKGROUND(0); CLRSCR;
+ REPEAT
+ TEXTCOLOR(7); WRITELN(ISTR); TEXTCOLOR(8); WRITELN(ICOM);
+ TEXTCOLOR(8); WRITE('(RANGE '); TEXTCOLOR(7); WRITE(IMIN); TEXTCOLOR(8);
+ WRITE(' TO '); TEXTCOLOR(7); WRITE(IMAX); TEXTCOLOR(8);
+ WRITE('; DEFAULT VALUE '); TEXTCOLOR(7); WRITE(IDEF); TEXTCOLOR(8);
+ WRITELN(')'); TEXTCOLOR(7); WRITE('> '); IVAL:=READ; IF IVAL=-1THEN IVAL:=IDEF;
+ IOK:=FALSE; IF(IVAL>=IMIN)AND(IVAL<=IMAX)THEN IOK:=TRUE
+ ELSE BEGIN CLRSCR; WRITELN('OUT OF RANGE!'); END; {OUTOFRANGE}
+ UNTIL IOK; INPUTINT:=IVAL;
+END; {INPUTINT}
PROCEDURE EDITGAME;
LABEL EDITGAME1,EDITGAME2;
BEGIN
REPEAT
- EDITTITLE(1,'EDIT GAMETYPES'); TEXTCOLOR(7); WRITE('1: SINGLEPLAYER ');
+ TITLEBAR(5,'EDIT GAMETYPES'); TEXTCOLOR(14); WRITE('1');
+ TEXTCOLOR(7); WRITE(': SINGLEPLAYER ');
TEXTCOLOR(3); IF B.LSINGLE=0THEN WRITELN('(NO LEVELS)')
- ELSE WRITELN('(',B.LSINGLE,')');
+ ELSE WRITELN('(',B.LTO[1]-B.LFROM[1]+1,' OF ',B.LSINGLE,')');
FOR II:=2TO 7DO BEGIN
TEXTCOLOR(14); WRITE(II); TEXTCOLOR(7); WRITE(': '+GAMETYPE[II],' ');
TEXTCOLOR(3); IF B.LFROM[II]=0THEN WRITELN('(NO LEVELS)')
- ELSE WRITELN('(',B.LFROM[II]+B.LSINGLE,'-',B.LTO[II]+B.LSINGLE,')');
+ ELSE WRITELN('(',B.LFROM[II],'-',B.LTO[II],')');
END; {MULTIP}
TEXTCOLOR(7); WRITE('8: CTF '); TEXTCOLOR(3);
- IF B.LCTF=0THEN WRITELN('(NO LEVELS)')ELSE WRITELN('(',B.LCTF,')');
- TEXTCOLOR(7); WRITELN;III:=EDITMENU(8);
-
- IF III>1THEN BEGIN
-EDITGAME1:
- WRITELN('ENTER NEW STARTING LEVEL FOR '+GAMETYPE[III]); WRITE('> ');
- READLN(B.LFROM[III]); IF B.LFROM[III]>B.LMULTI THEN BEGIN
- TEXTCOLOR(15); WRITE('THAT LEVEL DOES NOT EXIST! ');
- TEXTCOLOR(7); WRITELN('JUST ',B.LMULTI,' LEVELS PRESENT.');
- GOTO EDITGAME1;
- END; {TOO MUCH}
- IF B.LFROM[III]=0THEN WRITELN('NO LEVELS FOR THIS GAMETYPE.') {NO LVLS}
- ELSE BEGIN
-EDITGAME2:
- WRITE('ENTER LAST LEVEL #> '); READLN(B.LTO[III]);
- IF B.LTO[III]<B.LFROM[III]THEN BEGIN
- WRITELN('LAST LEVEL MUST BE BEHIND THE FIRST LEVEL.'); GOTO EDITGAME2;
- END; {ERROR}
- IF B.LTO[III]>B.LMULTI THEN BEGIN
- TEXTCOLOR(15); WRITE('THAT LEVEL DOES NOT (YET) EXIST! ');
- TEXTCOLOR(7); WRITELN('JUST ',B.LMULTI,' LEVELS PRESENT.');
- GOTO EDITGAME2;
- END; {TOO MUCH}
- END; {ASK LTO}
- END; {HANDLE}
+ IF B.LCTF=0THEN WRITE('(NO LEVELS)')ELSE WRITE('(',B.LCTF,')');
+
+ III:=EDITMENU(8,0);
+ 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]);
+ B.LTO[1]:=INPUTINT('ENTER LEVELS SELECTABLE','THE HIGHEST LEVEL SOMEONE CAN START IN WITHOUT PLAYING IT EARLIER',
+ 1,1,B.LSINGLE+1-B.LFROM[1]); B.LTO[1]:=B.LTO[1]+B.LFROM[1]-1;
+ END {SINGLEPLAYER} ELSE IF III>0THEN BEGIN
+ B.LFROM[III]:=INPUTINT('ENTER NEW STARTING LEVEL',
+ 'THAT LEVEL WILL BE LEVEL #1 IN GAMEMODE '+GAMETYPE[III]+'. 0=NO LEVELS',0,1,B.LMULTI);
+ IF B.LFROM[III]>0THEN
+ B.LTO[III]:=INPUTINT('ENTER LAST LEVEL NUMBER',NR(B.LMULTI)+' LEVELS PRESENT',
+ B.LFROM[III],B.LMULTI,B.LMULTI);
+ END; {MULTIPLAYER}
UNTIL III=-1; III:=0;
END; {EDITGAME}
LABEL EDITOBJ1;
BEGIN
REPEAT
- EDITTITLE(2,'EDIT OBJECT #'+NR(I)+' IN LEVEL '+NR(II));
+ TITLEBAR(2,'EDIT OBJECT #'+NR(I)+' IN LEVEL '+NR(II));
TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': OBJECT TYPE ');
III:=L[II].OBJ[I].TYP; TEXTCOLOR(3); WRITELN('(',III,')');
IF III<>0THEN BEGIN
- TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITE(': OBJECT BEGIN ');
+ TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7);
+ IF L[II].OBJ[I].TYP=4THEN WRITE(': OBJECT POSITION ')ELSE WRITE(': OBJECT BEGIN ');
TEXTCOLOR(3); WRITELN('(',L[II].OBJ[I].X1,',',L[II].OBJ[I].Y1,')');
- TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITE(': OBJECT END ');
- TEXTCOLOR(3); IF L[II].OBJ[I].TYP=3THEN
- WRITELN('(',L[II].OBJ[I].X2,',',L[II].OBJ[I].Y1+L[II].OBJ[I].Y2,')')
+ TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7);
+ IF L[II].OBJ[I].TYP=4THEN WRITE(': OBJECT SIZE ')ELSE WRITE(': OBJECT END ');
+ TEXTCOLOR(3); CASE L[II].OBJ[I].TYP OF
+ 3:WRITELN('(',L[II].OBJ[I].X2,',',L[II].OBJ[I].Y1+L[II].OBJ[I].Y2,')');
+ 4:WRITELN('(',L[II].OBJ[I].X2,')');
ELSE WRITELN('(',L[II].OBJ[I].X2,',',L[II].OBJ[I].Y2,')');
+ END; {TYPE}
+ TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': PREVIEW');
END; {OBJECT PROPERTIES}
- WRITELN; TEXTCOLOR(7); IF III<>0THEN III:=EDITMENU(3)ELSE III:=EDITMENU(1);
+
+ IF III<>0THEN III:=EDITMENU(4,0)ELSE III:=EDITMENU(1,0);
CASE III OF
1:BEGIN
-EDITOBJ1:
- WRITELN('ENTER OBJECT TYPE');
- TEXTCOLOR(8); FOR I4:=0TO 3DO WRITE(I4,': ',OBJTYPE[I4],' ');
- TEXTCOLOR(7); WRITELN; WRITE('> '); READLN(L[II].OBJ[I].TYP);
- IF L[II].OBJ[I].TYP>3THEN BEGIN
- WRITELN('INVALID TYPE!'); GOTO EDITOBJ1;
- END; {INVALID}
- TEXTCOLOR(8); WRITELN('SCREEN=(2,2)-(',L[II].FIELDX-2,',',L[II].FIELDY-2,
- '); CENTER=(',(L[II].FIELDX-1)SHR 1,',',(L[II].FIELDY-1)SHR 1,')');
- TEXTCOLOR(7); WRITE('ENTER X1> '); READLN(L[II].OBJ[I].X1);
- WRITE('ENTER Y1> '); READLN(L[II].OBJ[I].Y1);
- WRITE('ENTER X2> '); READLN(L[II].OBJ[I].X2);
- WRITE('ENTER Y2> '); READLN(L[II].OBJ[I].Y2);
- IF L[II].OBJ[I].TYP=3THEN
- L[II].OBJ[I].Y2:=L[II].OBJ[I].Y2-L[II].OBJ[I].Y1;
+ S:=''; FOR I4:=0TO 4DO S:=S+NR(I4)+': '+OBJTYPE[I4]+CC(' ',37-ORD(OBJTYPE[I4,0]));
+ L[II].OBJ[I].TYP:=INPUTINT('ENTER OBJECT TYPE',S,0,0,4);
+ S:='SCREEN=(0,0)-('+NR(L[II].FIELDX-2)+','+NR(L[II].FIELDY-2)+
+ '); CENTER=('+NR((L[II].FIELDX-1)SHR 1)+','+NR((L[II].FIELDY-1)SHR 1)+')';
+ IF L[II].OBJ[I].TYP=4 THEN BEGIN
+ L[II].OBJ[I].X1:=INPUTINT('ENTER X',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-4);
+ L[II].OBJ[I].Y1:=INPUTINT('ENTER Y',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-4);
+ L[II].OBJ[I].X2:=INPUTINT('ENTER SIZE',S,0,
+ MIN(L[II].FIELDY-4,L[II].FIELDX-4)SHR 2,MIN(L[II].FIELDY-4,L[II].FIELDX-4)SHR 1);
+ L[II].OBJ[I].Y2:=0;
+ END {CIRCLE} ELSE IF L[II].OBJ[I].TYP>0THEN BEGIN
+ IF L[II].OBJ[I].TYP=3THEN I4:=4 ELSE I4:=3;
+ L[II].OBJ[I].X1:=INPUTINT('ENTER X1',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-I4);
+ L[II].OBJ[I].Y1:=INPUTINT('ENTER Y1',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-I4);
+ L[II].OBJ[I].X2:=INPUTINT('ENTER X2',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-I4);
+ L[II].OBJ[I].Y2:=INPUTINT('ENTER Y2',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-I4);
+ IF L[II].OBJ[I].TYP=3THEN BEGIN
+ IF L[II].OBJ[I].Y2<L[II].OBJ[I].Y1 THEN BEGIN
+ I4:=L[II].OBJ[I].Y2; L[II].OBJ[I].Y2:=L[II].OBJ[I].Y1;
+ L[II].OBJ[I].Y1:=I4;
+ END; {END BEFORE START}
+ L[II].OBJ[I].Y2:=L[II].OBJ[I].Y2-L[II].OBJ[I].Y1;
+ END; {BOX}
+ END; {NORMAL OBJECT}
END; {TYPE}
2:BEGIN
- TEXTCOLOR(8); WRITELN('SCREEN=(2,2)-(',L[II].FIELDX-2,',',L[II].FIELDY-2,
- '); CENTER=(',(L[II].FIELDX-1)SHR 1,',',(L[II].FIELDY-1)SHR 1,')');
- TEXTCOLOR(7); WRITE('ENTER BEGIN X> '); READLN(L[II].OBJ[I].X1);
- WRITE('ENTER BEGIN Y> '); READLN(L[II].OBJ[I].Y1);
+ S:='SCREEN=(0,0)-('+NR(L[II].FIELDX-2)+','+NR(L[II].FIELDY-2)+
+ '); CENTER=('+NR((L[II].FIELDX-1)SHR 1)+','+NR((L[II].FIELDY-1)SHR 1)+')';
+ IF L[II].OBJ[I].TYP=4 THEN BEGIN
+ L[II].OBJ[I].X1:=INPUTINT('ENTER X',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-3);
+ L[II].OBJ[I].Y1:=INPUTINT('ENTER Y',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-3);
+ END {CIRCLE} ELSE IF L[II].OBJ[I].TYP>0THEN BEGIN
+ IF L[II].OBJ[I].TYP=3THEN I4:=4 ELSE I4:=3;
+ L[II].OBJ[I].X1:=INPUTINT('ENTER BEGIN X',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-I4);
+ L[II].OBJ[I].Y1:=INPUTINT('ENTER BEGIN Y',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-I4);
+ IF L[II].OBJ[I].TYP=3THEN
+ L[II].OBJ[I].Y2:=L[II].OBJ[I].Y2+(I4-L[II].OBJ[I].Y1);
+ END; {NORMAL OBJECT}
END; {BEGIN}
3:BEGIN
- TEXTCOLOR(8); WRITELN('SCREEN=(2,2)-(',L[II].FIELDX-2,',',L[II].FIELDY-2,
- '); CENTER=(',(L[II].FIELDX-1)SHR 1,',',(L[II].FIELDY-1)SHR 1,')');
- TEXTCOLOR(7); WRITE('ENTER END X> '); READLN(L[II].OBJ[I].X2);
- WRITE('ENTER END Y> '); READLN(L[II].OBJ[I].Y2);
- IF L[II].OBJ[I].TYP=3THEN
- L[II].OBJ[I].Y2:=L[II].OBJ[I].Y2-L[II].OBJ[I].Y1;
+ IF L[II].OBJ[I].TYP=4 THEN BEGIN
+ L[II].OBJ[I].X2:=INPUTINT('ENTER SIZE','r',0,
+ MIN(L[II].FIELDY-3,L[II].FIELDX-3)SHR 2,MIN(L[II].FIELDY-3,L[II].FIELDX-3)SHR 1);
+ L[II].OBJ[I].Y2:=0;
+ END {CIRCLE} ELSE IF L[II].OBJ[I].TYP>0THEN BEGIN
+ S:='SCREEN=(0,0)-('+NR(L[II].FIELDX-2)+','+NR(L[II].FIELDY-2)+
+ '); CENTER=('+NR((L[II].FIELDX-1)SHR 1)+','+NR((L[II].FIELDY-1)SHR 1)+')';
+ IF L[II].OBJ[I].TYP=3THEN I4:=4 ELSE I4:=3;
+ L[II].OBJ[I].X2:=INPUTINT('ENTER END X',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-I4);
+ L[II].OBJ[I].Y2:=INPUTINT('ENTER END Y',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-I4);
+ IF L[II].OBJ[I].TYP=3THEN BEGIN
+ IF L[II].OBJ[I].Y2<L[II].OBJ[I].Y1 THEN BEGIN
+ I4:=L[II].OBJ[I].Y2; L[II].OBJ[I].Y2:=L[II].OBJ[I].Y1;
+ L[II].OBJ[I].Y1:=I4;
+ END; {END BEFORE START}
+ L[II].OBJ[I].Y2:=L[II].OBJ[I].Y2-L[II].OBJ[I].Y1;
+ END; {BOX}
+ END; {NORMAL OBJECT}
END; {END}
+ 4:DISPMAP(I);
END; {HANDLE}
UNTIL III=-1; III:=0;
END; {EDITOBJ}
LABEL EDITOBJS1,EDITOBJS2;
BEGIN
REPEAT
- EDITTITLE(2,'EDIT LEVEL OBJECTS');
- TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITELN(': CREATE OBJECT');
- TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITELN(': EDIT OBJECT');
- TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITELN(': DELETE OBJECT');
- WRITELN;
- III:=EDITMENU(3);
-
+ TITLEBAR(2,'EDIT LEVEL OBJECTS');
+ IF L[II].NROBJ>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7);
+ WRITE('1'); TEXTCOLOR(7); WRITELN(': EDIT OBJECT');
+ IF L[II].NROBJ>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7);
+ WRITE('2'); TEXTCOLOR(7); WRITELN(': DELETE OBJECT');
+ TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITELN(': CREATE OBJECT');
+ TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': VIEW OBJECT');
+
+ III:=EDITMENU(4,0);
CASE III OF
- 1:BEGIN
- INC(L[II].NROBJ); I:=L[II].NROBJ; EDITOBJ;
- END; {CREATE}
- 2:BEGIN
-EDITOBJS1:
- WRITE('EDIT WHICH OBJECT> '); READLN(I);
- IF I>L[II].NROBJ THEN BEGIN
- WRITELN('JUST ',L[II].NROBJ,' OBJECTS PRESENT!');
- GOTO EDITOBJS1;
- END; {DNOT EXIST}
- IF I<>0THEN EDITOBJ;
- END; {PEAS}
- 3:BEGIN
-EDITOBJS2:
- WRITE('DELETE WHICH OBJECT> '); READLN(I);
- IF I>L[II].NROBJ THEN BEGIN
- WRITELN('I''M SORRY BUT THAT OBJECT DOES NOT EXIST');
- GOTO EDITOBJS2;
- END; {ERROR}
- IF I<>0THEN BEGIN
- WRITE('PLEASE CONFIRM OBJECT TO '); TEXTCOLOR(15); WRITE('REMOVE');
- TEXTCOLOR(7); WRITE('> '); READLN(I4);
- IF I=I4 THEN BEGIN
+ 1:IF L[II].NROBJ>0THEN BEGIN
+ I:=INPUTINT('EDIT WHICH OBJECT','',1,1,L[II].NROBJ);
+ EDITOBJ;
+ END; {EDIT}
+ 2:IF L[II].NROBJ>0THEN BEGIN
+ I:=INPUTINT('DELETE WHICH OBJECT','0=CANCEL',0,0,L[II].NROBJ);
+ IF I>0THEN BEGIN
+ I4:=INPUTINT('PLEASE CONFIRM OBJECT TO *REMOVE*','ENTER 0 TO CANCEL',0,0,L[II].NROBJ);
+ IF I=I4 THEN BEGIN
DEC(L[II].NROBJ); FOR I:=I4 TO L[II].NROBJ DO L[II].OBJ[I]:=L[II].OBJ[I+1];
- END; {OK}
- END; {SMTN}
+ END; {CONFIRMED}
+ END; {}
END; {DELETE}
+ 3:BEGIN
+ INC(L[II].NROBJ); I:=L[II].NROBJ; L[II].OBJ[I].TYP:=0; EDITOBJ;
+ END; {CREATE}
+ 4:BEGIN
+ I4:=INPUTINT('ENTER OBJECT TO HIGHLIGHT','0 FOR NONE',0,0,L[II].NROBJ);
+ DISPMAP(I4);
+ END; {DISP}
END; {HANDLE}
UNTIL III=-1; III:=0;
END; {EDITOBJS}
BYTE2STR:=SPRTEMP;
END; {BYTE2STR}
+FUNCTION BYTE2BIN(BYI1:BYTE):LONGINT;
+VAR BYI2:BYTE; BYI3:LONGINT;
+BEGIN
+ BYI3:=0;
+ FOR BYI2:=0TO 7DO BEGIN
+ IF BYI1 AND 1=1THEN BYI3:=BYI3+POW(10,BYI2);
+ BYI1:=BYI1 SHR 1;
+ END;
+ BYTE2BIN:=BYI3;
+END; {BYTE2BIN}
+
FUNCTION STR2BYTE(SPRITE:STRING):BYTE;
VAR SPRTEMP,SPRTEMP2:BYTE;
BEGIN
PROCEDURE EDITSPR;
BEGIN
REPEAT
- EDITTITLE(0,'EDIT SPRITE');
+ TITLEBAR(0,'EDIT SPRITE');
TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': SPRITE SIZE ');
- TEXTCOLOR(3); IF L[II].SPRSIZE=0THEN WRITELN('(DEFAULT)')
- ELSE WRITELN('(',L[II].SPRSIZE,')');
+ TEXTCOLOR(3); IF L[II].SPRSIZE=0THEN WRITELN('(',B.SPRSIZE,')')
+ ELSE WRITELN('(',L[II].SPRSIZE,')');
IF L[II].SPRSIZE=0THEN BEGIN
- TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITE(': EDIT SPRITE');
- TEXTCOLOR(3); WRITELN(' (DEFAULT)');
+ TEXTCOLOR(7); WRITE('2: EDIT SPRITE'); TEXTCOLOR(3); WRITELN(' (DEFAULT)');
END {DEF SPR} ELSE FOR I:=1TO L[II].SPRSIZE DO BEGIN
TEXTCOLOR(14); WRITE(I+1); TEXTCOLOR(7); WRITE(': EDIT '); TEXTCOLOR(3);
WRITELN(BYTE2STR(L[II].SPRITE[I],L[II].SPRSIZE));
END; {DISP SPRITE}
- TEXTCOLOR(7); WRITELN; III:=EDITMENU(1+L[II].SPRSIZE);
+ III:=EDITMENU(1+L[II].SPRSIZE,0);
IF III=1THEN BEGIN
- WRITE('ENTER NEW SPRITE SIZE (MAX.HEIGHT/WIDTH)> '); READLN(I);
- IF I>L[II].SPRSIZE THEN FOR I4:=L[II].SPRSIZE+1TO I DO
- L[II].SPRITE[I4]:=0;
+ I:=INPUTINT('ENTER NEW SPRITE SIZE','MAXIMUM HEIGHT AND WIDTH; 0=DEFAULT',0,B.SPRSIZE,8);
+ IF I>L[II].SPRSIZE THEN FOR I4:=L[II].SPRSIZE+1TO I DO L[II].SPRITE[I4]:=0;
L[II].SPRSIZE:=I;
END {SIZE} ELSE IF III>1THEN BEGIN
- WRITELN('ENTER NEW LINE #',III-1,' OF SPRITE'); TEXTCOLOR(8);
- WRITE('(ex: 100101 = X��X�X)'); TEXTCOLOR(7); WRITE('> ');
- READLN(S); L[II].SPRITE[III-1]:=STR2BYTE(S);
+ S:=INPUTSTR('ENTER NEW LINE #'+NR(III-1)+' OF SPRITE','EXAMPLE: 100101 = X��X�X',
+ ZERO(BYTE2BIN(L[II].SPRITE[III-1]),8),8);
+ L[II].SPRITE[III-1]:=STR2BYTE(S);
END; {APP}
UNTIL III=-1; III:=0;
END; {EDITSPR}
+PROCEDURE EDITBOUNCIES;
+BEGIN
+ REPEAT
+ TITLEBAR(0,'EDIT BALLS IN LEVEL #'+NR(II));
+ TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITELN(': CREATE BALL');
+ TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITELN(': DELETE BALL');
+ FOR III:=1TO L[II].NRBALLS DO BEGIN
+ TEXTCOLOR(14); WRITE(III+2); TEXTCOLOR(7); WRITE(': BALL #',III,' (');
+ TEXTCOLOR(3); WRITE(L[II].BALLS[III].X); TEXTCOLOR(7); WRITE(',');
+ TEXTCOLOR(3); WRITE(L[II].BALLS[III].Y); TEXTCOLOR(7); WRITE(') DIR ');
+ TEXTCOLOR(3); WRITELN(L[II].BALLS[III].D);
+ END; {WORMS}
+
+ III:=EDITMENU(2+L[II].NRBALLS,0);
+ IF III=1THEN BEGIN
+ INC(L[II].NRBALLS);
+ L[II].BALLS[L[II].NRBALLS].X:=INPUTINT('ENTER X','WHERE THE BALL STARTS BOUNCING',0,63,255);
+ L[II].BALLS[L[II].NRBALLS].Y:=INPUTINT('ENTER Y','',0,27,255);
+ L[II].BALLS[L[II].NRBALLS].D:=INPUTINT('ENTER DIRECTION','0/1:DOWN; 2/3:UP; 1/3:RIGHT; 0/2:LEFT',0,0,3);
+ END {CREATE} ELSE IF III=2THEN BEGIN
+ III:=INPUTINT('ENTER THE BOUNCY BALL TO REMOVE','(0 CANCELS)',0,0,L[II].NRBALLS);
+ IF III>0THEN BEGIN
+ DEC(L[II].NRBALLS); FOR I4:=III TO L[II].NRBALLS DO L[II].BALLS[I4]:=L[II].BALLS[I4+1];
+ END; {OK2REMOVE}
+ END {DELETE} ELSE IF III>0THEN BEGIN
+ L[II].BALLS[III-2].X:=INPUTINT('ENTER X','NOTE THE BOUNCY BALLS WILL PROBABLY BOLDLY GO SOME OTHER PLACE ANYWAY',
+ 0,L[II].BALLS[III-2].X,255);
+ L[II].BALLS[III-2].Y:=INPUTINT('ENTER Y','',0,L[II].BALLS[III-2].Y,255);
+ L[II].BALLS[III-2].D:=INPUTINT('ENTER DIRECTION','0/1:DOWN; 2/3:UP; 1/3:RIGHT; 0/2:LEFT',0,L[II].BALLS[III-2].D,3);
+ END; {EDIT}
+ UNTIL III=-1; III:=0;
+END; {EDITWORMS}
+
PROCEDURE EDITWORMS;
BEGIN
REPEAT
- EDITTITLE(0,'EDIT WORMS IN LEVEL #'+NR(II));
+ TITLEBAR(0,'EDIT WORMS IN LEVEL #'+NR(II));
IF II>B.LSINGLE THEN III:=4 ELSE III:=1;
FOR III:=1TO III DO BEGIN
TEXTCOLOR(14); WRITE(III SHL 1-1); TEXTCOLOR(7);
TEXTCOLOR(14); WRITE(III SHL 1); TEXTCOLOR(7);
WRITE(': WORM #',III,' POSITION '); TEXTCOLOR(3);
WRITELN('(',L[II].W[III].X,',',L[II].W[III].Y,')');
- END; {}
- TEXTCOLOR(7); WRITELN;
- IF III=4THEN III:=EDITMENU(8)ELSE III:=EDITMENU(2);
+ END; {WORMS}
- CASE III OF
- 1,3,5,7:BEGIN
- WRITELN('ENTER WORM #',(III+1)SHR 1,' STARTING DIRECTION'); TEXTCOLOR(8);
- WRITELN('(0=down; 64=right; 128=up; 192=left)');
- TEXTCOLOR(7); WRITE('> '); READLN(I); L[II].W[(III+1)SHR 1].D:=I;
- END; {DIR}
+ IF III=4THEN III:=EDITMENU(8,0)ELSE III:=EDITMENU(2,0);
+ CASE(III+1)OF
2,4,6,8:BEGIN
- WRITELN('ENTER WORM #',III SHR 1,' BEGIN X-POSITION'); TEXTCOLOR(8);
- WRITELN('(screen = 2-',L[II].FIELDX-2,'; center = ',L[II].FIELDX DIV 2);
- TEXTCOLOR(7); WRITE('> '); READLN(I); L[II].W[III SHR 1].X:=I;
- WRITELN('ENTER WORM #',III SHR 1,' BEGIN Y-POSITION'); TEXTCOLOR(8);
- WRITELN('(screen = 2-',L[II].FIELDY-2,'; center = ',L[II].FIELDY DIV 2);
- TEXTCOLOR(7); WRITE('> '); READLN(I); L[II].W[III SHR 1].Y:=I;
+ I:=INPUTINT('ENTER WORM #'+NR(III SHR 1)+' STARTING DIRECTION',
+ '0=DOWN; 64=RIGHT; 128=UP; 192=LEFT',0,L[II].W[III SHR 1].D,255);
+ L[II].W[III SHR 1].D:=I;
+ END; {DIR}
+ 3,5,7,9:BEGIN
+ I:=INPUTINT('ENTER WORM #'+NR(III SHR 1)+' BEGIN X-POSITION',
+ 'SCREEN = 2-'+NR(L[II].FIELDX-3)+'; CENTER = '+NR((L[II].FIELDX-1)SHR 1),
+ 2,L[II].W[III SHR 1].X,L[II].FIELDX-3);
+ L[II].W[III SHR 1].X:=I;
+ I:=INPUTINT('ENTER WORM #'+NR(III SHR 1)+' BEGIN Y-POSITION',
+ 'SCREEN = 2-'+NR(L[II].FIELDY-3)+'; CENTER = '+NR((L[II].FIELDY-1)SHR 1),
+ 2,L[II].W[III SHR 1].Y,L[II].FIELDY-3);
+ L[II].W[III SHR 1].Y:=I;
END; {POS}
END; {HANDLE}
UNTIL III=-1; III:=0;
PROCEDURE EDITLEVEL;
BEGIN
REPEAT
- L[II].SIZE:=12+L[II].NRBALLS+L[II].SPRSIZE+L[II].NROBJ*5;
- IF II>B.LSINGLE THEN INC(L[II].SIZE,9);
- EDITTITLE(3,'EDIT LEVEL #'+NR(II));
+ L[II].SIZE:=12+L[II].NRBALLS*3+L[II].SPRSIZE+L[II].NROBJ*5;
+ IF II>B.LSINGLE THEN INC(L[II].SIZE,9);
+ TITLEBAR(3,'EDIT LEVEL #'+NR(II));
TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': DESCRIPTION ');
TEXTCOLOR(3); WRITELN('(',L[II].NAME,')');
TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITE(': NUMBER OF PEAS ');
TEXTCOLOR(14); WRITE('8'); TEXTCOLOR(7); WRITE(': FIELD SIZE ');
TEXTCOLOR(3); WRITELN('(',L[II].FIELDX,',',L[II].FIELDY,')');
TEXTCOLOR(14); WRITE('9'); TEXTCOLOR(7); WRITE(': OBJECTS ');
- TEXTCOLOR(3); WRITELN('(',L[II].NROBJ,')');
- TEXTCOLOR(7); WRITELN;
- III:=EDITMENU(9);
+ TEXTCOLOR(3); WRITE('(',L[II].NROBJ,')');
+ III:=EDITMENU(10,0);
CASE III OF
- 1:BEGIN
- WRITELN('ENTER DESCRIPTION FOR THIS LEVEL'); WRITE('> ');
- READLN(S); IF S<>''THEN L[II].NAME:=S;
- END; {DESCR}
- 2:BEGIN
- WRITE('ENTER TOTAL NUMBER OF PEAS> ');
- READLN(I); L[II].PEAS:=I;
- END; {PEAS}
- 3:BEGIN
- WRITE('ENTER NEW DELAY '); TEXTCOLOR(8); WRITE('(0=fastest; 4=def.)');
- TEXTCOLOR(7); WRITE('> '); READLN(I); L[II].DELAY:=I;
- END; {DELAY}
+ 1:L[II].NAME:=INPUTSTR('ENTER DESCRIPTION FOR THIS LEVEL',
+ 'THIS WON''T BE DISPLAYED DURING THE GAME,IT''S JUST TO MAKE EDITING EASIER',L[II].NAME,22); {DESCR}
+ 2:L[II].PEAS:=INPUTINT('ENTER TOTAL NUMBER OF PEAS','TOO MANY PEAS WILL MAKE A LEVEL BORING',1,L[II].PEAS,255);
+ 3:L[II].DELAY:=INPUTINT('ENTER NEW DELAY','0=FASTEST; 4=AVERAGE; 10=SLOW',0,L[II].DELAY,255);
4:BEGIN
- WRITE('ENTER GROWTH PER PEA '); TEXTCOLOR(8); WRITE('(15=default)');
- TEXTCOLOR(7); WRITE('> '); READLN(I); L[II].GROWTH:=I;
- WRITE('ENTER WORM BEGIN SIZE '); TEXTCOLOR(8); WRITE('(15=default)');
- TEXTCOLOR(7); WRITE('> '); READLN(I); L[II].BSIZE:=I;
+ L[II].GROWTH:=INPUTINT('ENTER GROWTH PER PEA','0=NO GROWTH; 15=NORMAL',0,L[II].GROWTH,255);
+ L[II].BSIZE:=INPUTINT('ENTER WORM BEGIN SIZE','15=NORMAL; TOO SHORT WORMS WILL BE HARD TO PLAY WITH',
+ 1,L[II].BSIZE,255);
END; {GROWTH}
5:EDITSPR;
+ 6:EDITBOUNCIES;
7:EDITWORMS;
8:BEGIN
- WRITELN('ENTER FIELD WIDTH'); TEXTCOLOR(8);
- WRITE('(128=screen-width; 255=max.)');
- TEXTCOLOR(7); WRITE('> '); READLN(I); L[II].FIELDX:=BYTE(I);
- WRITELN('ENTER FIELD HEIGHT'); TEXTCOLOR(8);
- WRITE('(57=screen-height 255=max.)');
- TEXTCOLOR(7); WRITE('> '); READLN(I); L[II].FIELDY:=BYTE(I);
+ FOR III:=L[II].NROBJ DOWNTO 1DO
+ IF L[II].OBJ[III].Y2+L[II].OBJ[III].Y1=255THEN BEGIN
+ DEC(L[II].NROBJ); FOR I4:=III TO L[II].NROBJ DO L[II].OBJ[I4]:=L[II].OBJ[I4+1];
+ END; {REMOVE OLD BARS}
+ L[II].FIELDX:=INPUTINT('ENTER FIELD WIDTH','128=ONE SCREEN; MORE WILL SCROLL THE SCREEN',5,L[II].FIELDX,255);
+ IF L[II].FIELDX<128THEN BEGIN
+ INC(L[II].NROBJ); L[II].OBJ[L[II].NROBJ].X1:=L[II].FIELDX;
+ L[II].OBJ[L[II].NROBJ].Y2:=255; L[II].OBJ[L[II].NROBJ].TYP:=3;
+ L[II].OBJ[L[II].NROBJ].X2:=255; L[II].OBJ[L[II].NROBJ].Y1:=0;
+ END; {PUT BAR}
+ L[II].FIELDY:=INPUTINT('ENTER FIELD HEIGHT','57=ONE SCREEN; MORE WILL SCROLL THE SCREEN',5,L[II].FIELDY,255);
+ IF L[II].FIELDY<57THEN BEGIN
+ INC(L[II].NROBJ); L[II].OBJ[L[II].NROBJ].X1:=2;
+ L[II].OBJ[L[II].NROBJ].Y2:=255-L[II].FIELDY;
+ L[II].OBJ[L[II].NROBJ].X2:=L[II].FIELDX-1; L[II].OBJ[L[II].NROBJ].TYP:=3;
+ L[II].OBJ[L[II].NROBJ].Y1:=L[II].FIELDY;
+ END; {PUT BAR}
END; {FIELD}
9:EDITOBJS;
+ 10:DISPMAP(0);
END; {HANDLE}
UNTIL III=-1; III:=0;
END; {EDITLEVEL}
LABEL EDITHLVL1,EDITHLVL2;
BEGIN
REPEAT
- EDITTITLE(1,'EDIT LEVELS');
- TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITELN(': EDIT LEVEL');
- TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITELN(': DELETE LEVEL');
- TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITELN(': CREATE SINGLEPLAYER LEVEL');
- TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITELN(': CREATE MULTIPLAYER LEVEL');
- TEXTCOLOR(7); WRITE('5'); TEXTCOLOR(7); WRITELN(': CREATE CTF LEVEL');
- TEXTCOLOR(7); WRITELN; III:=EDITMENU(4);
+ TITLEBAR(1,'EDIT LEVELS');
+ IF B.LTOTAL>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7);
+ WRITE('1'); TEXTCOLOR(7); WRITELN(': EDIT LEVEL');
+ IF B.LTOTAL>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7);
+ WRITE('2'); TEXTCOLOR(7); WRITELN(': COPY LEVEL');
+ IF B.LTOTAL>0THEN TEXTCOLOR(7)ELSE TEXTCOLOR(7);
+ WRITE('3'); TEXTCOLOR(7); WRITELN(': MOVE LEVEL');
+ IF B.LTOTAL>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7);
+ WRITE('4'); TEXTCOLOR(7); WRITELN(': DELETE LEVEL');
+ TEXTCOLOR(14); WRITE('5'); TEXTCOLOR(7); WRITELN(': CREATE SINGLEPLAYER LEVEL');
+ TEXTCOLOR(14); WRITE('6'); TEXTCOLOR(7); WRITELN(': CREATE MULTIPLAYER LEVEL');
+ TEXTCOLOR(7); WRITE('7'); TEXTCOLOR(7); WRITELN(': CREATE CTF LEVEL');
+ TEXTCOLOR(7); WRITELN; III:=EDITMENU(6,0);
CASE III OF
- 1:BEGIN
-EDITHLVL1:
- WRITE('EDIT WHICH LEVEL> '); READLN(II);
- IF II>B.LTOTAL THEN BEGIN
- WRITELN('THAT LEVEL DOES NOT EXIST!'); GOTO EDITHLVL1;
- END; {ERROR}
+ 1:IF B.LTOTAL>0THEN BEGIN
+ II:=INPUTINT('EDIT WHICH LEVEL','0=CANCEL',0,0,B.LTOTAL);
IF II<>0THEN EDITLEVEL;
END; {EDIT}
- 2:BEGIN
-EDITHLVL2:
- WRITE('DELETE WHICH LEVEL> '); READLN(II);
- IF II>B.LTOTAL THEN BEGIN
- WRITELN('YOU CANNOT DELETE A LEVEL THAT DOES NOT EXIST!');
- GOTO EDITHLVL2;
- END; {ERROR}
+ 2:IF B.LTOTAL>0THEN BEGIN
+ II:=INPUTINT('COPY WHICH LEVEL','0=CANCEL',0,0,B.LTOTAL);
IF II<>0THEN BEGIN
- WRITE('PLEASE CONFIRM LEVEL TO '); TEXTCOLOR(15); WRITE('DELETE');
- TEXTCOLOR(7); WRITE('> '); READLN(I);
+ INC(B.LTOTAL);
+ IF II<=B.LSINGLE THEN BEGIN
+ INC(B.LSINGLE);
+ FOR I:=B.LTOTAL DOWNTO B.LSINGLE+1DO L[I]:=L[I-1];
+ L[B.LSINGLE]:=L[II]; II:=B.LSINGLE
+ END {SP} ELSE BEGIN
+ FOR I:=2TO 7DO IF B.LTO[I]=B.LMULTI THEN BEGIN
+ INC(B.LTO[I]); IF B.LFROM[I]=0THEN INC(B.LFROM[I]);
+ END; {ALL GAMETYPES}
+ INC(B.LMULTI); L[B.LTOTAL]:=L[II]; II:=B.LTOTAL;
+ END; {MP}
+ L[II].NAME:='Copy of '+L[II].NAME;
+ END; {>0}
+ END; {COPY}
+ 4:IF B.LTOTAL>0THEN BEGIN
+ II:=INPUTINT('DELETE WHICH LEVEL','0=CANCEL',0,0,B.LTOTAL);
+ IF II<>0THEN BEGIN
+ I:=INPUTINT('PLEASE CONFIRM LEVEL TO *REMOVE*','ENTER 0 TO CANCEL',0,0,B.LTOTAL);
IF I=II THEN BEGIN
IF I<=B.LSINGLE THEN DEC(B.LSINGLE)ELSE
IF I<=B.LMULTI+B.LSINGLE THEN DEC(B.LMULTI)ELSE
IF B.LTO[I]>B.LMULTI THEN B.LTO[I]:=B.LMULTI;
IF B.LFROM[I]>B.LTO[I]THEN B.LFROM[I]:=B.LTO[I];
END; {CHECK}
- END; {OK}
- END; {SMTN}
+ END; {CONFIRMED}
+ END; {}
END; {DELETE}
-
- 3:BEGIN
+ 5:BEGIN
INC(B.LSINGLE); INC(B.LTOTAL); II:=B.LSINGLE;
FOR I:=B.LTOTAL DOWNTO II+1DO L[I]:=L[I-1];
L[II].NAME:='Level #'+NR(II);
L[II].W[1].Y:=2; L[II].FIELDX:=128; L[II].FIELDY:=57; L[II].NROBJ:=0;
EDITLEVEL;
END; {CREATE SP}
- 4:BEGIN
+ 6:BEGIN
FOR I:=2TO 7DO IF B.LTO[I]=B.LMULTI THEN BEGIN
INC(B.LTO[I]); IF B.LFROM[I]=0THEN INC(B.LFROM[I]);
END; {}
PROCEDURE EDITDSPR;
BEGIN
REPEAT
- EDITTITLE(0,'EDIT DEFAULT SPRITE');
+ TITLEBAR(0,'EDIT DEFAULT SPRITE');
TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': SPRITE SIZE ');
- TEXTCOLOR(3); WRITELN('(',B.SPRSIZE,')');
+ 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}
- TEXTCOLOR(7); WRITELN; III:=EDITMENU(1+B.SPRSIZE);
+ III:=EDITMENU(1+B.SPRSIZE,0);
IF III=1THEN BEGIN
- WRITELN('ENTER THE DEFAULT SPRITE SIZE'); TEXTCOLOR(8);
- WRITE('(1-8; can be changed per level)'); TEXTCOLOR(7); WRITE('> ');
- READLN(I); IF(I>0)AND(I<=8)THEN BEGIN
- IF I>B.SPRSIZE THEN FOR I4:=B.SPRSIZE+1TO I DO B.SPRITE[I4]:=0;
- B.SPRSIZE:=I;
- END; {OK}
+ 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
- WRITELN('ENTER NEW LINE #',III-1,' OF SPRITE'); TEXTCOLOR(8);
- WRITE('(ex: 100101 = X��X�X)'); TEXTCOLOR(7); WRITE('> ');
- READLN(S); B.SPRITE[III-1]:=STR2BYTE(S);
+ 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
- EDITTITLE(0,'SINGLEPLAYER ENDING');
+ TITLEBAR(0,'SINGLEPLAYER ENDING');
TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': END TYPE ');
TEXTCOLOR(3); WRITELN(' (',ENDTYPE[B.ENDTYPE],')'); TEXTCOLOR(14);
CASE B.ENDTYPE OF
TEXTCOLOR(3); WRITE(' (',COPY(B.ENDDATA,1,18));
IF LENGTH(B.ENDDATA)>18THEN WRITELN('...)')ELSE WRITELN(')');
END; {MSG}
- END; {TYPE} TEXTCOLOR(7); WRITELN; III:=EDITMENU(2);
+ END; {TYPE}
+
+ III:=EDITMENU(2,0);
CASE III OF
1:BEGIN
- WRITELN('ENTER NEW END TYPE:'); TEXTCOLOR(8);
- FOR II:=0TO 1DO WRITE(II,': ',ENDTYPE[-II],' '); WRITELN; TEXTCOLOR(7);
- WRITE('> '); READLN(II); IF(II<=1)AND(II>=0)THEN B.ENDTYPE:=-II;
- IF II=1THEN B.ENDDATA:='Congratulations!!';
+ 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!!';
END; {TITLE}
- 2:BEGIN
- CASE B.ENDTYPE OF
- -1:BEGIN
- WRITE('ENTER NEW END MESSAGE '); TEXTCOLOR(8);
- WRITELN('(max 255 chars)'); WRITE('> ');
- READLN(S); IF S<>''THEN B.ENDDATA:=S;
- END; {MSG}
- END; {TYPE}
- END; {EDIT}
+ 2:IF B.ENDTYPE=-1THEN
+ B.ENDDATA:=INPUTSTR('ENTER NEW END MESSAGE','MAX 255 CHARS','Congratulations!!',255);
END; {HANDLE}
UNTIL III=-1; III:=0;
END; {EDITSPEND}
PROCEDURE EDITMAIN;
BEGIN
REPEAT
- S:=''; FOR II:=1TO LENGTH(B.NAME)DO S:=S+UPCASE(B.NAME[II]); EDITTITLE(4,S);
+ 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('4'); TEXTCOLOR(7); WRITE(': SP ENDING');
TEXTCOLOR(3); WRITELN(' (',ENDTYPE[B.ENDTYPE],')');
TEXTCOLOR(14); WRITE('5'); TEXTCOLOR(7); WRITE(': LEVELS');
- TEXTCOLOR(3); WRITELN(' (',B.LTOTAL,')');
- TEXTCOLOR(7); WRITELN; III:=EDITMENU(5);
+ TEXTCOLOR(3); WRITE(' (',B.LTOTAL,')');
+
+ III:=EDITMENU(5,3);
CASE III OF
- 1:BEGIN
- WRITELN('ENTER NEW TITLE FOR THIS LEVELFILE ');
- TEXTCOLOR(8); WRITE('enter=don''t alter; max. length 32 chars ');
- TEXTCOLOR(7); WRITE('> '); READLN(S); IF S<>''THEN B.NAME:=S;
- END; {TITLE}
+ 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;
3:EDITGAME;
4:EDITSPEND;
PROCEDURE OPENFILE;
BEGIN
- ASSIGN(F,FILENAME+'.LVL'); {$I-} RESET(F,1); {$I+} IF IORESULT=0THEN BEGIN
- {$I-} BLOCKREAD(F,B,SIZEOF(B)); BLOCKREAD(F,L,SIZEOF(L)); {$I+}
- IF(IORESULT<>0)OR(B.HEAD<>HEADEDIT)THEN BEGIN
- TEXTCOLOR(15); WRITE('WARNING!! '); TEXTCOLOR(7);
- WRITELN('ERROR READING LEVEL FILE!');
- CLOSE(F); HALT;
- END; {ERROR}
- IF B.VERSION<>HEADVERSION THEN BEGIN
- WRITELN('CAN''T READ FILE VERSION ',B.VERSION,'.'); CLOSE(F); HALT;
- END; {VERSION}
- END; {OPEN EXISTING FILE}
+ ASSIGN(F,FILENAME+'.LVL'); {$I-} RESET(F,1); {$I+} I:=IORESULT;
+ IF I<>0THEN 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+}
+ IF(IORESULT<>0)OR(B.HEAD<>HEADEDIT)THEN BEGIN
+ TEXTCOLOR(15); WRITE('WARNING!! '); TEXTCOLOR(7);
+ WRITELN('ERROR READING LEVEL FILE!');
+ CLOSE(F); HALT;
+ END; {ERROR}
+ IF B.VERSION<>HEADVERSION THEN BEGIN
+ WRITELN('CAN''T READ FILE VERSION ',B.VERSION,'.'); CLOSE(F); HALT;
+ END; {VERSION}
END; {OPENFILE}
PROCEDURE FILESAVE;
BLOCKWRITE(FF,HEAD86S[1],ORD(HEAD86S[0])); {86S-HEADER}
ISTACK:=$12+6+B.SPRSIZE+ORD(B.NAME[0])+24+2+
2*(1+(B.LTO[2]-B.LFROM[2])+(B.LTO[3]-B.LFROM[3]));
- FOR II:=1TO B.LTOTAL DO INC(ISTACK,L[II].SIZE);
+ FOR II:=B.LFROM[1]TO B.LTOTAL DO INC(ISTACK,L[II].SIZE);
BLOCKWRITE(FF,ISTACK,2); {FILE LENGTH (x+$12)}
I:=$000C; BLOCKWRITE(FF,I,2); {STRING ID}
DEC(ISTACK,$10); BLOCKWRITE(FF,ISTACK,2); {DATA LENGTH (x+2)}
DEC(ISTACK,2); BLOCKWRITE(FF,ISTACK,2); {PROG LENGTH (x)}
C:='w'; BLOCKWRITE(FF,C,1); {WORM ID}
- I:=92; BLOCKWRITE(FF,I,1); {VERSION}
+ I:=HEADVERSION; BLOCKWRITE(FF,I,1); {VERSION}
BLOCKWRITE(FF,B.NAME[0],ORD(B.NAME[0])+1); {TITLE}
- I:=1+B.SPRSIZE+2; FOR II:=1TO B.LTOTAL DO I:=I+L[II].SIZE;
+ I:=1+B.SPRSIZE+2; FOR II:=B.LFROM[1]TO B.LTOTAL DO I:=I+L[II].SIZE;
BLOCKWRITE(FF,I,2); {SIZE}
I2:=0; I:=$F401+B.SPRSIZE;
IF B.LSINGLE=0THEN BLOCKWRITE(FF,I2,2)ELSE BEGIN
- BLOCKWRITE(FF,I,2); FOR II:=1TO B.LSINGLE DO INC(I,L[II].SIZE);
+ BLOCKWRITE(FF,I,2); FOR II:=B.LFROM[1]TO B.LSINGLE DO INC(I,L[II].SIZE);
END; {SINGLLVLS} INC(I,2);
ISTACK:=I; FOR II:=2TO 7DO BEGIN
I:=ISTACK; IF B.LFROM[II]=0THEN I:=0 ELSE
FOR II:=B.LSINGLE+B.LMULTI+1TO B.LTOTAL DO INC(ISTACK,L[II].SIZE);
I:=0; IF B.LCTF=0THEN BLOCKWRITE(FF,I,2)ELSE BLOCKWRITE(FF,ISTACK,2);
- BLOCKWRITE(FF,B.LSINGLE,1);
- FOR II:=2TO 7DO BEGIN
+ FOR II:=1TO 7DO BEGIN
IF B.LFROM[II]=0THEN I:=0 ELSE I:=B.LTO[II]-B.LFROM[II]+1;
BLOCKWRITE(FF,I,1);
END; {NR}
BLOCKWRITE(FF,B.SPRSIZE,1);
BLOCKWRITE(FF,B.SPRITE,B.SPRSIZE);
- FOR II:=1TO B.LSINGLE DO BEGIN
+ FOR II:=B.LFROM[1]TO B.LSINGLE DO BEGIN
BLOCKWRITE(FF,L[II].PEAS,1);
BLOCKWRITE(FF,L[II].DELAY,1);
BLOCKWRITE(FF,L[II].GROWTH,1);
PROCEDURE EDITQUIT;
BEGIN
REPEAT
- EDITTITLE(0,'CHOOSE LEVELFILE');
+ TITLEBAR(0,'CHOOSE LEVELFILE');
TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITELN(': COMPILE, SAVE AND QUIT');
TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITE(': SAVE ');
TEXTCOLOR(3); WRITELN(FILENAME,'.LVL');
TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITELN(': QUIT');
TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITELN(': CONTINUE EDITING');
- WRITELN; III:=EDITMENU(4);
+ WRITELN; III:=EDITMENU(4,0);
CASE III OF
1:BEGIN
FILESAVE; FILECOMP; HALT;
END; {COMPILE}
2:FILESAVE;
3:BEGIN
- WRITE('REALLY QUIT '); TEXTCOLOR(8); WRITE('[Y/N]'); TEXTCOLOR(7);
+ WINDOW(1,8,40,8);
+ WRITE('REALLY QUIT '); TEXTCOLOR(8); WRITE('[Y/N]'); TEXTCOLOR(7);
WRITE('> '); REPEAT C:=READKEY; UNTIL(UPCASE(C)='Y')OR(UPCASE(C)='N');
- IF UPCASE(C)='N'THEN III:=0;
+ IF UPCASE(C)<>'Y'THEN III:=0;
END; {QUIT}
4:EDITMAIN;
END; {HANDLE}
PROCEDURE EDITFILE;
BEGIN
REPEAT
- EDITTITLE(0,'CHOOSE LEVELFILE');
+ TITLEBAR(0,'CHOOSE LEVELFILE');
TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITELN(': CREATE NEW FILE');
TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITELN(': EDIT EXISTING');
TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITE(': EDIT'); TEXTCOLOR(3);
- WRITELN(' WORMLVL1.LVL'); TEXTCOLOR(7); WRITELN; III:=EDITMENU(3);
+ WRITE(' WORMLVL1.LVL');
+
+ III:=EDITMENU(3,2);
CASE III OF
1:BEGIN
- WRITE('ENTER FILENAME '); TEXTCOLOR(8); WRITE('(max.8 chars)');
- TEXTCOLOR(7); WRITE('> '); READLN(FILENAME); EDITMAIN; EDITQUIT;
+ FILENAME:=INPUTSTR('ENTER LEVELNAME','8 CHARS MAX; W/O EXTENSION','WORMLVL1',8);
+ IF NOT FILEEXIST(FILENAME+'.LVL')THEN FILESAVE;
+ OPENFILE; EDITMAIN; EDITQUIT;
END; {NEW}
2:BEGIN
- WRITE('ENTER LEVELNAME '); TEXTCOLOR(8); WRITE('(w/o extension)');
- TEXTCOLOR(7); WRITE('> '); READLN(FILENAME); OPENFILE; EDITMAIN;
- EDITQUIT;
+ FILENAME:=INPUTSTR('ENTER FILENAME','W/O EXTENSION','WORMLVL1',8);
+ OPENFILE; EDITMAIN; EDITQUIT;
END; {EDIT}
3:BEGIN
FILENAME:='WORMLVL1'; OPENFILE; EDITMAIN; EDITQUIT;
BEGIN
- CLRSCR;
- TEXTCOLOR(1); WRITE('���������������������������<');
- TEXTCOLOR(14); WRITE(' WormEdit � ');
- TEXTCOLOR(15); WRITE(' by SHIAR ');
- TEXTCOLOR(1); WRITE('>�����������������������������');
- EDITFILE;
+ MAINTITLE; EDITFILE;
END.
\ No newline at end of file