X-Git-Url: http://git.shiar.nl/wormy.git/blobdiff_plain/05b2b45114015912ccf5db24096b386eace99029..37987191d672dcf172ea678dbb999acbb22ba181:/wormedit.pas diff --git a/wormedit.pas b/wormedit.pas index 22918c0..ce8b3fc 100644 --- a/wormedit.pas +++ b/wormedit.pas @@ -1,5 +1,28 @@ USES CRT,SHIAR; +TYPE ONELEVEL = RECORD + NAME:STRING[22]; + SIZE:BYTE; + PEAS,DELAY:BYTE; + GROWTH,BSIZE:BYTE; + SPRSIZE:BYTE; + SPRITE:ARRAY[1..8]OF BYTE; + NRBALLS:BYTE; + BALLS:ARRAY[1..32]OF RECORD + Y,X,D:BYTE; {Z:%00=right+down, %11=left+up} + END; {BALLS} + W:ARRAY[1..4]OF RECORD + D,Y,X:BYTE; + END; {W(ORMS)} + FIELDX,FIELDY:BYTE; + FLAG1Y,FLAG1X:BYTE; + FLAG2Y,FLAG2X:BYTE; + NROBJ:BYTE; + OBJ:ARRAY[1..32]OF RECORD + TYP:SHORTINT;X1,Y1,X2,Y2:BYTE; + END; {OBJ} + END; {ONELEVEL} + CONST GAMETYPE:ARRAY[1..8]OF STRING[12] = ('SINGLEPLAYER','PEAWORM','TRON','DEATHMATCH', 'FOODMATCH','LINKPLAY','RACE','CTF'); @@ -33,8 +56,8 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] = VERSION:HEADVERSION; NAME:'Custom Worm Level'; 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); + LFROM:(0,0,0,0,0,0,0,0); + LTO:(0,0,0,0,0,0,0,0); SPRSIZE:4; SPRITE:(6*16,15*16,15*16,6*16,0,0,0,0); {01100000 @@ -52,34 +75,14 @@ VAR I,I2:WORD; S:STRING; F,FF:FILE; - L:ARRAY[1..64]OF RECORD - NAME:STRING[22]; - SIZE:BYTE; - PEAS,DELAY:BYTE; - GROWTH,BSIZE:BYTE; - SPRSIZE:BYTE; - SPRITE:ARRAY[1..8]OF BYTE; - NRBALLS:BYTE; - BALLS:ARRAY[1..32]OF RECORD - Y,X,D:BYTE; {Z:%00=right+down, %11=left+up} - END; {BALLS} - W:ARRAY[1..4]OF RECORD - D,Y,X:BYTE; - END; {W(ORMS)} - FIELDX,FIELDY:BYTE; - FLAG1Y,FLAG1X:BYTE; - FLAG2Y,FLAG2X:BYTE; - NROBJ:BYTE; - OBJ:ARRAY[1..32]OF RECORD - TYP,X1,Y1,X2,Y2:BYTE; - END; {OBJ} - END; {L} + L:ARRAY[1..64]OF ONELEVEL; + LTEMP:ONELEVEL; FILENAME:STRING[8]; PROCEDURE MAINTITLE; BEGIN - SETTEXT; CLRSCR; + SETTEXT; WINDOW(1,1,80,25); {TEXTBACKGROUND(0);} CLRSCR; TEXTCOLOR(1); WRITE('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ<'); TEXTCOLOR(14); WRITE(' WormEdit á '); TEXTCOLOR(15); WRITE(' by SHIAR '); @@ -118,7 +121,7 @@ BEGIN 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 + FOR Y:=L[II].OBJ[OBJ].Y1 TO L[II].OBJ[OBJ].Y1+L[II].OBJ[OBJ].Y2-1DO 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); @@ -159,6 +162,8 @@ BEGIN 1:WRITE('PRESS OR FOR HELP'); 2:WRITE('YOU UNDERSTAND EVERYTHING'); 3:WRITE('THIS AIN''T A BUG, IT A FEATURE!'); + 4:WRITE('ALL YOUR WORMS ARE BELONG TO US!'); + 5:WRITE('PRESS UP AND DOWN TO VIEW ALL LEVELS'); END; {TEXT TO DISPLAY} END; {HELPBAR} @@ -190,9 +195,13 @@ END; {EDITMENU} FUNCTION COMPSIZE:WORD; BEGIN - I:=$32+B.SPRSIZE+ORD(B.NAME[0])+ - 2*(1+(B.LTO[2]-B.LFROM[2])+(B.LTO[3]-B.LFROM[3])); - FOR II:=1TO B.LTOTAL DO INC(I,L[II].SIZE); + 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); + 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); + END; {CALC LEVELS} COMPSIZE:=I; END; {COMPSIZE} @@ -210,15 +219,16 @@ BEGIN WRITE('LEVEL OBJECTS',' ':39-13); TEXTCOLOR(7); TEXTBACKGROUND(0); IF L[II].NROBJ<1THEN WRITELN('NONE')ELSE 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(I4); TEXTCOLOR(3); + IF L[II].OBJ[I4].TYP>0THEN BEGIN + WRITE(': ',OBJTYPE[L[II].OBJ[I4].TYP]); 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); + 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} + END {ENABLED} ELSE WRITELN(': DISABLED'); TEXTCOLOR(7); END; {DISP OBJS} END; {2:SINGLVLS} 3:BEGIN @@ -341,36 +351,43 @@ BEGIN REPEAT 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,')'); + III:=L[II].OBJ[I].TYP; TEXTCOLOR(3); WRITELN('(',ABS(III),')'); IF III<>0THEN 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); - IF L[II].OBJ[I].TYP=4THEN WRITE(': OBJECT SIZE ')ELSE WRITE(': OBJECT END '); + IF L[II].OBJ[I].TYP>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7); WRITE('2'); TEXTCOLOR(7); + IF ABS(L[II].OBJ[I].TYP)=4THEN WRITE(': OBJECT POSITION ')ELSE WRITE(': OBJECT BEGIN'); + IF L[II].OBJ[I].TYP>0THEN BEGIN + TEXTCOLOR(3); WRITELN(' (',L[II].OBJ[I].X1,',',L[II].OBJ[I].Y1,')'); + END {PRESENT} ELSE WRITELN; + IF L[II].OBJ[I].TYP>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7); WRITE('3'); TEXTCOLOR(7); + IF ABS(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,')'); + 1..10:WRITELN('(',L[II].OBJ[I].X2,',',L[II].OBJ[I].Y2,')'); + ELSE WRITELN; END; {TYPE} - TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': PREVIEW'); + TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITELN(': PREVIEW'); + TEXTCOLOR(14); WRITE('5'); TEXTCOLOR(7); + IF L[II].OBJ[I].TYP<0THEN WRITE(': ENABLE')ELSE WRITE(': DISABLE'); END; {OBJECT PROPERTIES} - IF III<>0THEN III:=EDITMENU(4,0)ELSE III:=EDITMENU(1,0); + IF III<>0THEN III:=EDITMENU(5,0)ELSE III:=EDITMENU(1,0); CASE III OF 1:BEGIN 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)+ + S:='SCREEN=(2,2)-('+NR(L[II].FIELDX-3)+','+NR(L[II].FIELDY-3)+ '); 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].X1:=INPUTINT('ENTER X',S+ + ' DO NOT MAKE CIRCLES LEFT OF THE SCREEN!',0,(L[II].FIELDX-1)SHR 1,255); + L[II].OBJ[I].Y1:=INPUTINT('ENTER Y',S+ + ' DON''T TRY Y<0: MIGHT CRASH CALC!!!',0,(L[II].FIELDY-1)SHR 1,255); + L[II].OBJ[I].X2:=INPUTINT('ENTER SIZE',S,3, + 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 - IF L[II].OBJ[I].TYP=3THEN I4:=4 ELSE I4:=3; + IF(L[II].OBJ[I].TYP=1)OR(L[II].OBJ[I].TYP=3)THEN I4:=2 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); @@ -385,30 +402,33 @@ BEGIN END; {NORMAL OBJECT} END; {TYPE} 2:BEGIN - S:='SCREEN=(0,0)-('+NR(L[II].FIELDX-2)+','+NR(L[II].FIELDY-2)+ + S:='SCREEN=(2,2)-('+NR(L[II].FIELDX-3)+','+NR(L[II].FIELDY-3)+ '); 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); + L[II].OBJ[I].X1:=INPUTINT('ENTER X',S+ + ' BE CAREFUL DRAWING OFF-SCREEN!',0,L[II].OBJ[I].X1,255); + L[II].OBJ[I].Y1:=INPUTINT('ENTER Y',S,0,L[II].OBJ[I].Y1,255); 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); + L[II].OBJ[I].Y2:=L[II].OBJ[I].Y2+L[II].OBJ[I].Y1-3; + IF(L[II].OBJ[I].TYP=1)OR(L[II].OBJ[I].TYP=3)THEN I4:=2 ELSE I4:=3; + L[II].OBJ[I].X1:=INPUTINT('ENTER BEGIN X',S,2,L[II].OBJ[I].X1,L[II].FIELDX-I4); + L[II].OBJ[I].Y1:=INPUTINT('ENTER BEGIN Y',S,2,L[II].OBJ[I].Y1,L[II].FIELDY-I4); + IF L[II].OBJ[I].TYP=3THEN + L[II].OBJ[I].Y2:=L[II].OBJ[I].Y2-L[II].OBJ[I].Y1+3; END; {NORMAL OBJECT} END; {BEGIN} 3:BEGIN 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].X2:=INPUTINT('ENTER SIZE','CROSSING BOUNDARIES NOT CHECKED', + 3,L[II].OBJ[I].X2,255{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=1)OR(L[II].OBJ[I].TYP=3)THEN I4:=2 ELSE I4:=3; + L[II].OBJ[I].X2:=INPUTINT('ENTER END X',S,2,L[II].OBJ[I].X2,L[II].FIELDX-I4); + L[II].OBJ[I].Y2:=INPUTINT('ENTER END Y',S,2,L[II].OBJ[I].Y2,L[II].FIELDY-I4); IF L[II].OBJ[I].TYP=3THEN BEGIN IF L[II].OBJ[I].Y20THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7); WRITE('2'); TEXTCOLOR(7); WRITELN(': COPY LEVEL'); - IF B.LTOTAL>0THEN TEXTCOLOR(7)ELSE TEXTCOLOR(7); + IF B.LTOTAL>0THEN TEXTCOLOR(14)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); + TEXTCOLOR(7); WRITELN; III:=EDITMENU(6,5); CASE III OF 1:IF B.LTOTAL>0THEN BEGIN @@ -697,6 +720,18 @@ BEGIN L[II].NAME:='Copy of '+L[II].NAME; END; {>0} END; {COPY} + 3:IF B.LTOTAL>0THEN BEGIN + I:=INPUTINT('MOVE WHICH LEVEL','0=CANCEL',0,0,B.LTOTAL); + IF II<>0THEN BEGIN + II:=INPUTINT('NEW LEVEL NUMBER','ENTER 0 TO CANCEL',0,0,B.LTOTAL); + IF((I<=B.LSINGLE)AND(II<=B.LSINGLE)) + OR((I>B.LSINGLE)AND(II>B.LSINGLE))THEN BEGIN + LTEMP:=L[I]; IF II>I THEN FOR I4:=I TO II-1DO L[I4]:=L[I4+1] + ELSE FOR I4:=I DOWNTO II+1DO L[I4]:=L[I4-1]; + L[II]:=LTEMP; + END; {CONFIRMED} + END; {} + END; {MOVE} 4:IF B.LTOTAL>0THEN BEGIN II:=INPUTINT('DELETE WHICH LEVEL','0=CANCEL',0,0,B.LTOTAL); IF II<>0THEN BEGIN @@ -844,25 +879,45 @@ END; {FILESAVE} PROCEDURE FILECOMP; VAR ISTACK:WORD; +PROCEDURE SAVELEVEL(SAVEWORMS:BYTE); +BEGIN + BLOCKWRITE(FF,L[II].PEAS,1); + BLOCKWRITE(FF,L[II].DELAY,1); + BLOCKWRITE(FF,L[II].GROWTH,1); + BLOCKWRITE(FF,L[II].BSIZE,1); + BLOCKWRITE(FF,L[II].SPRSIZE,1); + BLOCKWRITE(FF,L[II].SPRITE,L[II].SPRSIZE); + BLOCKWRITE(FF,L[II].NRBALLS,1); + BLOCKWRITE(FF,L[II].BALLS,L[II].NRBALLS*3); + BLOCKWRITE(FF,L[II].W[1].D,3*SAVEWORMS); {D,X,Y} + BLOCKWRITE(FF,L[II].FIELDX,2); {FIELDX,FIELDY} + FOR I:=1TO L[II].NROBJ DO BEGIN + IF L[II].OBJ[I].TYP>0THEN BEGIN + BLOCKWRITE(FF,L[II].OBJ[I].TYP,4); + IF(L[II].OBJ[I].TYP=3)AND(L[II].OBJ[I].Y2+L[II].OBJ[I].Y1=255)THEN BEGIN + I4:=MAX(57,L[II].FIELDY)-L[II].OBJ[I].Y1; BLOCKWRITE(FF,I4,1); + END {OFFSCREEN} ELSE BLOCKWRITE(FF,L[II].OBJ[I].Y2,1); + END; {VALID} + END; {OBJS} + I:=0; BLOCKWRITE(FF,I,1); {LVL END} +END; {COMMONSAVELEVEL} BEGIN ASSIGN(FF,FILENAME+'.86S'); REWRITE(FF,1); 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:=B.LFROM[1]TO B.LTOTAL DO INC(ISTACK,L[II].SIZE); - BLOCKWRITE(FF,ISTACK,2); {FILE LENGTH (x+$12)} + ISTACK:=COMPSIZE; 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)} I:=$080C; BLOCKWRITE(FF,I,2); {STRING ID} - S:='wormlvl1'; BLOCKWRITE(FF,S[1],8); {PRGNAME} + S:=LOCS(FILENAME); BLOCKWRITE(FF,S[1],8); {PRGNAME} 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:=HEADVERSION; BLOCKWRITE(FF,I,1); {VERSION} - BLOCKWRITE(FF,B.NAME[0],ORD(B.NAME[0])+1); {TITLE} + BLOCKWRITE(FF,B.NAME[1],ORD(B.NAME[0])); {TITLE} + I:=0; BLOCKWRITE(FF,I,1); {STRING TERMINATOR #0} I:=1+B.SPRSIZE+2; FOR II:=B.LFROM[1]TO B.LTOTAL DO I:=I+L[II].SIZE; BLOCKWRITE(FF,I,2); {SIZE} @@ -888,45 +943,15 @@ BEGIN BLOCKWRITE(FF,B.SPRSIZE,1); BLOCKWRITE(FF,B.SPRITE,B.SPRSIZE); - 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); - BLOCKWRITE(FF,L[II].BSIZE,1); - BLOCKWRITE(FF,L[II].SPRSIZE,1); - BLOCKWRITE(FF,L[II].SPRITE,L[II].SPRSIZE); - BLOCKWRITE(FF,L[II].NRBALLS,1); - BLOCKWRITE(FF,L[II].BALLS,L[II].NRBALLS*3); - BLOCKWRITE(FF,L[II].W[1].D,3); {D,X,Y} - BLOCKWRITE(FF,L[II].FIELDX,2); {FIELDX,FIELDY} - FOR I:=1TO L[II].NROBJ DO BEGIN - BLOCKWRITE(FF,L[II].OBJ[I].TYP,5); - END; {OBJS} - I:=0; BLOCKWRITE(FF,I,1); {LVL END} - END; {LEVELS SINGLEPL} - + 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 BEGIN - BLOCKWRITE(FF,L[II].PEAS,1); - BLOCKWRITE(FF,L[II].DELAY,1); - BLOCKWRITE(FF,L[II].GROWTH,1); - BLOCKWRITE(FF,L[II].BSIZE,1); - BLOCKWRITE(FF,L[II].SPRSIZE,1); - BLOCKWRITE(FF,L[II].SPRITE,L[II].SPRSIZE); - BLOCKWRITE(FF,L[II].NRBALLS,1); - BLOCKWRITE(FF,L[II].BALLS,L[II].NRBALLS*3); - BLOCKWRITE(FF,L[II].W[1].D,3*4); {D,X,Y} - BLOCKWRITE(FF,L[II].FIELDX,2); {FIELDX,FIELDY} - FOR I:=1TO L[II].NROBJ DO BEGIN - BLOCKWRITE(FF,L[II].OBJ[I].TYP,5); - END; {OBJS} - I:=0; BLOCKWRITE(FF,I,1); {LVL END} - END; {LEVELS MULTIPL} - - I:=0; FOR II:=1TO 1+(B.LTO[2]-B.LFROM[2])+(B.LTO[3]-B.LFROM[3])DO - BLOCKWRITE(FF,I,2); {HI} + 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} SEEK(FF,$37); I2:=0; I:=0; REPEAT INC(I,I2); BLOCKREAD(FF,I2,1,ISTACK); UNTIL ISTACK<>1;