From 0519b439bb5b1eb97a4513fb363f74122f410ca8 Mon Sep 17 00:00:00 2001 From: Mischa Poslawsky Date: Sat, 8 Sep 2001 23:03:26 +0200 Subject: [PATCH] wormedit 0.95.1908 --- wormedit.pas | 404 ++++++++++++++++++++++++++++++++------------------- wormy001.lvl | Bin 8660 -> 9061 bytes 2 files changed, 251 insertions(+), 153 deletions(-) diff --git a/wormedit.pas b/wormedit.pas index 98979d8..abba523 100644 --- a/wormedit.pas +++ b/wormedit.pas @@ -45,6 +45,7 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] = HEAD:ARRAY[1..15]OF CHAR; VERSION:BYTE; NAME:STRING[32]; + DESC:STRING[64]; LSINGLE,LMULTI,LRACE,LCTF,LTOTAL:BYTE; LFROM:ARRAY[1..8]OF BYTE; LTO:ARRAY[1..8]OF BYTE; @@ -58,6 +59,7 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] = (HEAD:HEADEDIT; VERSION:HEADVERSION; NAME:'Custom Worm Level'; + DESC:'Not done yet. Obviously.'; LSINGLE:0; LMULTI:0; LRACE:0; LCTF:0; LTOTAL:0; LFROM:(0,0,0,0,0,0,0,0); LTO:(0,0,0,0,0,0,0,0); @@ -94,6 +96,8 @@ VAR I,I2:WORD; L:ARRAY[1..64]OF ONELEVEL; LTEMP:ONELEVEL; + USEMOUSE:BOOLEAN; + QUITOK:BOOLEAN; FSIZE:LONGINT; FILENAME:STRING[8]; @@ -138,8 +142,60 @@ BEGIN {JUST_A_SIMPLE_LINE_PROCEDURE} END; {DRAW_THE_LINE} END; {LINE} +PROCEDURE PPLINE(X,Y,XX,YY:INTEGER;COL:BYTE); +VAR LINE1,LINE2,SX,SY,SXY,SYX,DX1,DX2,DY1,DY2:INTEGER; +BEGIN {SPECIAL LINE} + SX:=XX-X; SY:=YY-Y; DX1:=SGN(SX); DX2:=DX1; DY1:=SGN(SY); DY2:=0; + SXY:=ABS(SX); SYX:=ABS(SY); + IF SYX>SXY THEN BEGIN + DY2:=DY1; DX2:=0; LINE1:=SXY; SXY:=SYX; SYX:=LINE1; + END; {VERTICAL_LINE} + LINE1:=SXY SHR 1; + FOR LINE2:=0TO SXY DO BEGIN + PUTPIXEL(X,Y,GETPIXEL(X,Y,VGA)OR 1-COL,PTR(VGA,0)); + LINE1:=LINE1+SYX; + IF LINE1=0 THEN BEGIN ZZ:=ZZ-(YY SHL 1)+2; DEC(YY); END; + ZZ:=ZZ+(XX SHL 1)+3; + UNTIL XX>=YY; +END; {PPCIRCLE} + +PROCEDURE PPDISPOBJ(OBJ:INTEGER;COL:BYTE); +VAR Y:BYTE; +BEGIN + CASE L[II].OBJ[OBJ].TYP OF + 1:PPLINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2,COL); + 2:BEGIN + PPLINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2,COL); + PPLINE(L[II].OBJ[OBJ].X1+1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2+1,L[II].OBJ[OBJ].Y2,COL); + PPLINE(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); + PPLINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1+1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2+1,COL); + END; {FATLINE} + 3:BEGIN + FOR Y:=L[II].OBJ[OBJ].Y1 TO L[II].OBJ[OBJ].Y1+L[II].OBJ[OBJ].Y2-1DO + PPLINE(L[II].OBJ[OBJ].X1,MIN(Y,191),L[II].OBJ[OBJ].X2,MIN(Y,191),COL); + END; {BOX} + 4:PPCIRCLE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,COL); + END; {OBJECT TYPE} +END; {DISPOBJ} + PROCEDURE DISPMAP(OBJ:INTEGER;WHERE:POINTER); -VAR OBJ2:INTEGER; +VAR OBJ2,TI:INTEGER; PROCEDURE CIRCLE(X,Y,Z,COL:BYTE); VAR XX,YY,ZZ:INTEGER; BEGIN @@ -179,49 +235,51 @@ BEGIN END; {OBJECT TYPE} END; {DISPOBJ} BEGIN {---} - I:=7; WHILE I<=255DO BEGIN LINE(I,0,I,191,2,WHERE); INC(I,8); END; {GRID} - I:=0; WHILE I<=191DO BEGIN LINE(0,I,255,I,2,WHERE); INC(I,8); END; - I:=127; WHILE I<=255DO BEGIN LINE(I,0,I,191,6,WHERE); INC(I,128); END; - I:=0; WHILE I<=191DO BEGIN LINE(0,I,255,I,6,WHERE); INC(I,56); END; - - FOR I:=2TO L[II].FIELDX-2DO BEGIN - IF I MOD 2=0THEN PUTPIXEL(I,L[II].FIELDY SHR 1,4,WHERE) - ELSE PUTPIXEL(I,L[II].FIELDY SHR 1,2,WHERE); + TI:=3; WHILE TI<=255DO BEGIN LINE(TI,0,TI,191,18,WHERE); INC(TI,8); END; {GRID} + TI:=4; WHILE TI<=191DO BEGIN LINE(0,TI,255,TI,18,WHERE); INC(TI,8); END; + TI:=7; WHILE TI<=255DO BEGIN LINE(TI,0,TI,191,2,WHERE); INC(TI,8); END; {GRID} + TI:=0; WHILE TI<=191DO BEGIN LINE(0,TI,255,TI,2,WHERE); INC(TI,8); END; + TI:=127; WHILE TI<=255DO BEGIN LINE(TI,0,TI,191,6,WHERE); INC(TI,128); END; + TI:=0; WHILE TI<=191DO BEGIN LINE(0,TI,255,TI,6,WHERE); INC(TI,56); END; + + FOR TI:=2TO L[II].FIELDX-2DO BEGIN + IF TI MOD 2=0THEN PUTPIXEL(TI,L[II].FIELDY SHR 1,4,WHERE) + ELSE PUTPIXEL(TI,L[II].FIELDY SHR 1,2,WHERE); END; {MID} IF L[II].FIELDY MOD 2=0THEN - FOR I:=2TO L[II].FIELDX-2DO BEGIN - IF I MOD 2=1THEN PUTPIXEL(I,L[II].FIELDY SHR 1-1,4,WHERE) - ELSE PUTPIXEL(I,L[II].FIELDY SHR 1-1,2,WHERE); + FOR TI:=2TO L[II].FIELDX-2DO BEGIN + IF TI MOD 2=1THEN PUTPIXEL(TI,L[II].FIELDY SHR 1-1,4,WHERE) + ELSE PUTPIXEL(TI,L[II].FIELDY SHR 1-1,2,WHERE); END; {DOUBLEMID} - FOR I:=2TO L[II].FIELDY-2DO BEGIN - IF I MOD 2=0THEN PUTPIXEL(L[II].FIELDX SHR 1,I,4,WHERE) - ELSE PUTPIXEL(L[II].FIELDX SHR 1,I,2,WHERE); + FOR TI:=2TO L[II].FIELDY-2DO BEGIN + IF TI MOD 2=0THEN PUTPIXEL(L[II].FIELDX SHR 1,TI,4,WHERE) + ELSE PUTPIXEL(L[II].FIELDX SHR 1,TI,2,WHERE); END; {CENTER} IF L[II].FIELDX MOD 2=0THEN - FOR I:=2TO L[II].FIELDY-2DO BEGIN - IF I MOD 2=1THEN PUTPIXEL(L[II].FIELDX SHR 1-1,I,4,WHERE) - ELSE PUTPIXEL(L[II].FIELDX SHR 1-1,I,2,WHERE); + FOR TI:=2TO L[II].FIELDY-2DO BEGIN + IF TI MOD 2=1THEN PUTPIXEL(L[II].FIELDX SHR 1-1,TI,4,WHERE) + ELSE PUTPIXEL(L[II].FIELDX SHR 1-1,TI,2,WHERE); END; {DOUBLECENTER} IF(II>B.LSINGLE+B.LMULTI)AND(II<=B.LSINGLE+B.LMULTI+B.LRACE)THEN BEGIN LINE(L[II].FLAG1Y,0,L[II].FLAG1Y,L[II].FLAG1X,22,WHERE); LINE(L[II].FLAG1Y,L[II].FLAG1X,L[II].FLAG1Y,L[II].FIELDY-1,24,WHERE); LINE(0,L[II].FLAG1X,L[II].FIELDX-1,L[II].FLAG1X,16,WHERE); END; {RACE} - IF II<=B.LSINGLE THEN I:=1 ELSE I:=4; - FOR I:=1TO I DO BEGIN - CIRCLE(L[II].W[I].X,L[II].W[I].Y,2,14); - LINE(L[II].W[I].X,L[II].W[I].Y,L[II].W[I].X+ROUND(SIN(L[II].W[I].D/128*PI)*20), - L[II].W[I].Y+ROUND(COS(L[II].W[I].D/128*PI)*20),16,WHERE); - LINE(L[II].W[I].X,L[II].W[I].Y,L[II].W[I].X+ROUND(SIN((L[II].W[I].D-13)/128*PI)*15), - L[II].W[I].Y+ROUND(COS((L[II].W[I].D-13)/128*PI)*15),14,WHERE); - LINE(L[II].W[I].X,L[II].W[I].Y,L[II].W[I].X+ROUND(SIN((L[II].W[I].D+13)/128*PI)*15), - L[II].W[I].Y+ROUND(COS((L[II].W[I].D+13)/128*PI)*15),14,WHERE); - PUTPIXEL(L[II].W[I].X,L[II].W[I].Y,0,WHERE); + IF II<=B.LSINGLE THEN TI:=1 ELSE TI:=4; + FOR TI:=1TO TI DO BEGIN + CIRCLE(L[II].W[TI].X,L[II].W[TI].Y,2,14); + LINE(L[II].W[TI].X,L[II].W[TI].Y,L[II].W[TI].X+ROUND(SIN(L[II].W[TI].D/128*PI)*20), + L[II].W[TI].Y+ROUND(COS(L[II].W[TI].D/128*PI)*20),16,WHERE); + LINE(L[II].W[TI].X,L[II].W[TI].Y,L[II].W[TI].X+ROUND(SIN((L[II].W[TI].D-13)/128*PI)*15), + L[II].W[TI].Y+ROUND(COS((L[II].W[TI].D-13)/128*PI)*15),14,WHERE); + LINE(L[II].W[TI].X,L[II].W[TI].Y,L[II].W[TI].X+ROUND(SIN((L[II].W[TI].D+13)/128*PI)*15), + L[II].W[TI].Y+ROUND(COS((L[II].W[TI].D+13)/128*PI)*15),14,WHERE); + PUTPIXEL(L[II].W[TI].X,L[II].W[TI].Y,0,WHERE); END; {WORMS} IF II>B.LSINGLE+B.LMULTI+B.LRACE THEN BEGIN - IF L[II].SPRSIZE>0THEN I:=L[II].SPRSIZE ELSE I:=B.SPRSIZE; - DRAW4PIX(L[II].FLAG1X,L[II].FLAG1Y,I,I,22); {FLAGS} - DRAW4PIX(L[II].FLAG2X,L[II].FLAG2Y,I,I,24); + IF L[II].SPRSIZE>0THEN TI:=L[II].SPRSIZE ELSE TI:=B.SPRSIZE; + DRAW4PIX(L[II].FLAG1X,L[II].FLAG1Y,TI,TI,22); {FLAGS} + DRAW4PIX(L[II].FLAG2X,L[II].FLAG2Y,TI,TI,24); END; {DRAW FLAGS} LINE(0,0,255,0,8,WHERE); LINE(0,1,255,1,8,WHERE); {BORDERS} LINE(0,2,0,190-3,8,WHERE); LINE(1,2,1,190-3,8,WHERE); @@ -238,15 +296,18 @@ END; {DISPMAP} PROCEDURE DISPMAPMCGA(OBJ:INTEGER); BEGIN SETMCGA; - SETPAL(2,16,0,0); {GRID} SETPAL(4,24,0,0); {MID} SETPAL(6,32,0,0); {MAINGRID} - SETPAL(8,63,63,63); {BORDER} - SETPAL(10,48,48,48); {OBJ} SETPAL(12,63,63,20); {HL_OBJ} SETPAL(14,63,0,0); {STARTPOS} - SETPAL(16,63,16,0); {STLN}SETPAL(22,0,0,63); {FLAG1} SETPAL(24,0,63,0); {FLAG2} - - SETPAL(1,32,0,0); {BACK} - SETPAL(3,40,0,0); {GRID} SETPAL(3,44,0,0); {GRID} SETPAL(5,48,0,0); {MAINGRID} SETPAL(9,63,0,0); {BORDER} - SETPAL(11,63,0,0); {OBJ} SETPAL(13,63,0,0); {HL_OBJ} SETPAL(15,63,0,0); {STARTPOS} - SETPAL(17,52,0,0); {STLN}SETPAL(23,63,0,0); {FLAG1} SETPAL(25,63,0,0); {FLAG2} + SETPAL(0,0,0,0); {BACK} SETPAL(1,32,0,0); {BACK} + SETPAL(2,12,0,0); {GRID} SETPAL(3,38,0,0); {GRID} + SETPAL(4,20,0,0); {MID} SETPAL(5,40,0,0); {MID} + SETPAL(6,28,0,0); {MAINGRID} SETPAL(7,44,0,0); {MAINGRID} + SETPAL(8,63,63,63); {BORDER} SETPAL(9,63,0,0); {BORDER} + SETPAL(10,48,48,48); {OBJ} SETPAL(11,63,0,0); {OBJ} + SETPAL(12,63,63,20); {HL_OBJ} SETPAL(13,63,16,0); {HL_OBJ} + SETPAL(14,48,32,0); SETPAL(15,44,0,0); {STLN} + SETPAL(16,48,48,0); SETPAL(17,52,0,0); {STARTPOS} + SETPAL(18,8,0,0); SETPAL(19,36,0,0); {SUBGRID} + SETPAL(22,0,0,63); {FLAG1} SETPAL(23,63,0,0); {FLAG1} + SETPAL(24,0,63,0); {FLAG2} SETPAL(25,63,0,0); {FLAG2} DISPMAP(OBJ,PTR(VGA,0)); END; {DISPMAPMCGA} @@ -258,7 +319,7 @@ VAR VIRT:^SCRN; I1,I1X,I1Y:BYTE; BEGIN NEW(VIRT); - FOR I:=0 TO 199DO FOR I2:=0 TO 319DO VIRT^[I,I2]:=0; DISPMAP(OBJ,VIRT); + FOR TI:=0 TO 199DO FOR I2:=0 TO 319DO VIRT^[I,I2]:=0; DISPMAP(OBJ,VIRT); WINDOW(1,3,80,20); FOR I:=0 TO 19DO FOR I2:=0 TO 79DO BEGIN I1X:=ROUND(I2*L[II].FIELDX/80); I1Y:=ROUND(I*L[II].FIELDY/20); @@ -274,51 +335,99 @@ BEGIN WRITE('Û'); END; DISPOSE(VIRT);} -PROCEDURE PPLINE(X,Y,XX,YY:INTEGER;COL:BYTE); -VAR LINE1,LINE2,SX,SY,SXY,SYX,DX1,DX2,DY1,DY2:INTEGER; -BEGIN {SPECIAL LINE} - SX:=XX-X; SY:=YY-Y; DX1:=SGN(SX); DX2:=DX1; DY1:=SGN(SY); DY2:=0; - SXY:=ABS(SX); SYX:=ABS(SY); - IF SYX>SXY THEN BEGIN - DY2:=DY1; DX2:=0; LINE1:=SXY; SXY:=SYX; SYX:=LINE1; - END; {VERTICAL_LINE} - LINE1:=SXY SHR 1; - FOR LINE2:=0TO SXY DO BEGIN - PUTPIXEL(X,Y,GETPIXEL(X,Y,VGA)OR 1-COL,PTR(VGA,0)); - LINE1:=LINE1+SYX; - IF LINE1XMAX THEN MX:=XMAX; - IF MYYMAX THEN MY:=YMAX; - IF M2 THEN BEGIN MX:=XDEF; MY:=YDEF; END; {R_BUTTON} - PUTPIXEL(MX,MY,GETPIXEL(MX,MY,VGA)XOR 1,PTR(VGA,0)); DELAY(10); - PUTPIXEL(MX,MY,GETPIXEL(MX,MY,VGA)XOR 1,PTR(VGA,0)); - UNTIL(KEYPRESSED)OR(M1); MAINTITLE; + PPDISPOBJ(OBJ,0); + IF USEMOUSE THEN BEGIN + REPEAT GETMOUSEPOS(MX,MY,M1,M2); + UNTIL(MX<>MXX)OR(MY<>MYY)OR(M1)OR(M2)OR(KEYPRESSED); + MXX:=MX; MYY:=MY; MX:=MX SHR 1; + IF KEYPRESSED THEN BEGIN C:=READKEY; + IF(C=#13)OR(C=' ')THEN M1:=TRUE; IF(C=#27)OR(C='+')THEN M2:=TRUE; + END; {KEYS} + END {MOUSE} ELSE BEGIN + REPEAT UNTIL KEYPRESSED; C:=READKEY; + IF(C=#13)OR(C=' ')THEN M1:=TRUE ELSE M1:=FALSE; + IF(C=#27)OR(C='+')THEN M2:=TRUE ELSE M2:=FALSE; + IF C='2'THEN INC(MY); {DOWN} IF C='8'THEN DEC(MY); {UP} + IF C='4'THEN DEC(MX); {L} IF C='6'THEN INC(MX); {R} + IF C=#0THEN BEGIN C:=READKEY; + IF C=#80 THEN INC(MY); {DOWN} IF C=#72 THEN DEC(MY); {UP} + IF C=#75 THEN DEC(MX); {L} IF C=#77 THEN INC(MX); {R} + END; {EXTENDED} + END; {KEYB} + IF NOT M1 THEN BEGIN + IF MXXMAX THEN MX:=XMAX; + IF MYYMAX THEN MY:=YMAX; + IF M2 THEN BEGIN MX:=XDEF; MY:=YDEF; END; {R_BUTTON} + IF(USEMOUSE)AND((MX<>MXX)OR(MY<>MYY))THEN BEGIN + MX:=MX SHL 1; MOUSE(4,MX,MX,MX,MY); MX:=MX SHR 1; + END; {SET_NEW_MOUSE_POS} + PPDISPOBJ(OBJ,1); + IF OBJSUB=0THEN CASE L[II].OBJ[OBJ].TYP OF + 3:BEGIN + INC(L[II].OBJ[OBJ].Y2,L[II].OBJ[OBJ].Y1-MY); + L[II].OBJ[OBJ].X1:=MX; L[II].OBJ[OBJ].Y1:=MY; + END; {BOX} + ELSE BEGIN L[II].OBJ[OBJ].X1:=MX; L[II].OBJ[OBJ].Y1:=MY; END; {DEF} + END {FROM} ELSE CASE L[II].OBJ[OBJ].TYP OF + 3:BEGIN L[II].OBJ[OBJ].X2:=MX; L[II].OBJ[OBJ].Y2:=MY-L[II].OBJ[OBJ].Y1; + END; {BOX} + 4:BEGIN L[II].OBJ[OBJ].X2:=ABS(MX-INTEGER(L[II].OBJ[OBJ].X1)); L[II].OBJ[OBJ].Y2:=0; END; {CIRCLE} + ELSE BEGIN L[II].OBJ[OBJ].X2:=MX; L[II].OBJ[OBJ].Y2:=MY; END; {DEF} + END; {TO} + END; {K} + UNTIL M1; MAINTITLE; + IF(L[II].OBJ[OBJ].TYP=3)AND(L[II].OBJ[OBJ].Y1<0)THEN BEGIN + I4:=L[II].OBJ[OBJ].Y1; L[II].OBJ[OBJ].Y1:=L[II].OBJ[OBJ].Y2; + L[II].OBJ[OBJ].Y1:=-I4; + END; {SWAP Y FOR BOX} END; {MAPOBJ} FUNCTION NR(VALUE:LONGINT):STRING; @@ -406,7 +515,7 @@ BEGIN FOR I4:=1TO L[II].NROBJ DO IF L[II].OBJ[I4].TYP<=0THEN DEC(I,5); END; {SIZE OF LEVEL II} BEGIN - I:=$31+B.SPRSIZE+ORD(B.NAME[0])+5; + I:=$31+B.SPRSIZE+ORD(B.NAME[0])+ORD(B.DESC[0])+6; 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); IF B.LFROM[1]>0THEN FOR II:=B.LFROM[1]TO B.LSINGLE DO COMPLEVEL; {SP} @@ -547,7 +656,7 @@ BEGIN END {SINGLEPLAYER} ELSE IF III=7THEN BEGIN B.LFROM[7]:=INPUTINT('ENTER STARTING LEVEL','USUALLY 1 UNLESS YOU WANT TO SKIP LEVELS0=NO LEVELS',0,1,B.LRACE); IF B.LFROM[7]>0THEN - B.LTO[7]:=INPUTINT('ENTER LAST LEVEL','',B.LFROM[7],B.LCTF,B.LCTF); + B.LTO[7]:=INPUTINT('ENTER LAST LEVEL','',B.LFROM[7],B.LRACE,B.LRACE); END {RACE} ELSE IF III=8THEN BEGIN B.LFROM[8]:=INPUTINT('ENTER STARTING LEVEL','USUALLY 1 UNLESS YOU WANT TO SKIP LEVELS0=NO LEVELS',0,1,B.LCTF); IF B.LFROM[8]>0THEN @@ -597,78 +706,51 @@ BEGIN 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=(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+ - ' 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); + IF L[II].OBJ[I].TYP=4THEN BEGIN + L[II].OBJ[I].X1:=(L[II].FIELDX-1)SHR 1; + L[II].OBJ[I].Y1:=(L[II].FIELDY-1)SHR 1; + L[II].OBJ[I].X2:=MIN(L[II].FIELDY-3,L[II].FIELDX-3)SHR 2; L[II].OBJ[I].Y2:=0; END {CIRCLE} ELSE IF L[II].OBJ[I].TYP>0THEN BEGIN 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); - 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].Y20THEN BEGIN - IF III=4THEN BEGIN - IF L[II].OBJ[I].TYP=3THEN - 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); - END {ENTER} ELSE BEGIN - MAPOBJ(I,2,L[II].OBJ[I].X1,L[II].FIELDX-I4,2,L[II].OBJ[I].Y1,L[II].FIELDY-I4); - L[II].OBJ[I].X1:=MX; L[II].OBJ[I].Y1:=MY; - END; {SEL} + IF L[II].OBJ[I].TYP=3THEN + 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} - 4,5:BEGIN + 3:MAPOBJ(I,0); + 4:BEGIN IF L[II].OBJ[I].TYP=4 THEN BEGIN - IF III=5THEN BEGIN - MAPOBJ(I,0,16,255,L[II].OBJ[I].Y1,L[II].OBJ[I].Y1,L[II].OBJ[I].Y1); - L[II].OBJ[I].X2:=ABS(INTEGER(L[II].OBJ[I].X1)-MX); {&&&&} - END {SEL} ELSE - 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].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 - IF III=4THEN 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=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); - END {ENTER} ELSE BEGIN - MAPOBJ(I,2,L[II].OBJ[I].X2,L[II].FIELDX-I4,2,L[II].OBJ[I].Y2,L[II].FIELDY-I4); - L[II].OBJ[I].X2:=MX; L[II].OBJ[I].Y2:=MY; - END; {SEL} + 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=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 {RACE LEVELS} @@ -1323,17 +1409,17 @@ BEGIN WRITELN; III:=EDITMENU(4,0); CASE III OF 1:BEGIN - FILESAVE; FILECOMP; HALT; + FILESAVE; FILECOMP; QUITOK:=TRUE; END; {COMPILE} 2:FILESAVE; 3:BEGIN WINDOW(1,8,40,8); WRITE('REALLY QUIT '); TEXTCOLOR(C_SUB); WRITE('[Y/N]'); TEXTCOLOR(C_TEXT); WRITE('> '); REPEAT C:=READKEY; UNTIL(UPCASE(C)='Y')OR(UPCASE(C)='N'); - IF UPCASE(C)='Y'THEN HALT; + IF UPCASE(C)='Y'THEN QUITOK:=TRUE; END; {QUIT} END; {HANDLE} - UNTIL III=4; + UNTIL(III=4)OR(QUITOK); END; {EDITQUIT} PROCEDURE EDITFILE; @@ -1346,6 +1432,8 @@ BEGIN INC(FILESFOUND); IF FILESFOUND>9THEN BREAK; SFILES[FILESFOUND]:=SFILE.NAME; FINDNEXT(SFILE); END; {FIND MORE LEVELS} + TEXTCOLOR(C_MENU); WRITE('4'); TEXTCOLOR(C_TEXT); WRITELN(': ALL DONE!'); + DELAY(250); REPEAT TITLEBAR(0,'CHOOSE LEVELFILE'); TEXTCOLOR(C_MENU); WRITE('1'); TEXTCOLOR(C_TEXT); WRITELN(': CREATE NEW FILE'); @@ -1379,6 +1467,16 @@ END; {EDITFILE} BEGIN {M 16384,0,655360} {$M 16384,0,655360} - MAINTITLE; EDITFILE; - REPEAT EDITMAIN; EDITQUIT; UNTIL TRUE=FALSE; + MAINTITLE; TITLEBAR(0,'LOADING WORMEDIT...'); + TEXTCOLOR(C_MENU); WRITE('1'); TEXTCOLOR(C_TEXT); WRITELN(': WORMEDIT STARTED'); + TEXTCOLOR(C_MENU); WRITE('2'); TEXTCOLOR(C_TEXT); WRITE(': MOUSE... '); + MOUSE(0,I,I2,MX,MY); IF I<>0THEN BEGIN USEMOUSE:=TRUE; WRITELN(' FOUND'); + END {MOUSE} ELSE BEGIN + WRITELN(' NOT FOUND!'); USEMOUSE:=FALSE; REPEAT UNTIL KEYPRESSED; + END; {NO_MOUSE} + TEXTCOLOR(C_MENU); WRITE('3'); TEXTCOLOR(C_TEXT); WRITELN(': SEARCHING FOR LEVELS'); + EDITFILE; REPEAT EDITMAIN; EDITQUIT; UNTIL QUITOK=TRUE; + WINDOW(1,1,80,25); TEXTCOLOR(7); TEXTBACKGROUND(0); CLRSCR; + WRITE('EXITING '); TEXTCOLOR(15); WRITE('WORMEDIT 0.95 BY SHIAR'); + TEXTCOLOR(7); WRITELN('.'); WRITELN('BYEBYE..'); WRITELN; END. \ No newline at end of file diff --git a/wormy001.lvl b/wormy001.lvl index d624ff67f30a60fa0703d5d0bf285b626927730e..9559679c3d8f9c68f34e69ca4c7e416896706fd7 100644 GIT binary patch delta 238 zcmccO{M1b#JijQ{H6^p;p`|HK}SbN!NkIp%?rhtnJk5TTtP}L zfJ*)R6@mjCon0NnT!WYlEy^;JQxzPGQu7kSJe^&26+psvT&x@-a1&e|WV8;*)G{#H zH<;NsSTXj8kV;;M7!S=F$-1V&-B85}XpEoXlD5C0xvz5~V4; aj}SvaM@L7&#EmJNABizDZ8nuM-~<36P83}L -- 2.30.0