todo update
[wormy.git] / wormedit.pas
index 35e496a23c7cfa824724c240a5158bd7c83a9819..a9ed81fbe073cad4f4eecf772b89cbb8b16206bd 100644 (file)
@@ -1,4 +1,4 @@
-{WORMEDIT 0.51 OR SOMETHING... BY SHIAR
+{WORMEDIT 0.53 OR SOMETHING... BY SHIAR
  ----------------------------------w00t}
 
 {PASCAL.... BECAUSE I'VE GOT A LOT OF EXPERIENCE USING IT, AND I JUST NEEDED A
@@ -32,7 +32,7 @@ TYPE ONELEVEL = RECORD
        FLAG1Y,FLAG1X:BYTE;
        FLAG2Y,FLAG2X:BYTE;
        NROBJ:BYTE;
-       OBJ:ARRAY[1..32]OF RECORD
+       OBJ:ARRAY[1..128]OF RECORD
         TYP:SHORTINT;X1,Y1,X2,Y2:BYTE;
        END; {OBJ}
      END; {ONELEVEL}
@@ -50,10 +50,10 @@ CONST GAMETYPE:ARRAY[1..9]OF STRING[12] =
 
       HEAD86S:STRING[53] =
        ('**TI86**'+#$1A+#$A+#0+ {HEADER}
-        'Wormy.97 Levelfile made using WormEdit0.51'); {COMMENT}
+        'Wormy.97 Levelfile made using WormEdit0.53'); {COMMENT}
 
-      HEADEDIT = ('WormEdit�95'+#0+'LVL');
-      HEADVERSION = 95;
+      HEADEDIT = ('WormEdit053'+#0+'LVL');
+      HEADVERSION = 53;
       HEADOUTVERSION = 97;
       PC = $F080; {F400}
 
@@ -62,23 +62,26 @@ CONST GAMETYPE:ARRAY[1..9]OF STRING[12] =
        VERSION:BYTE;
        NAME:STRING[32];
        DESC:STRING[64];
+       RES:STRING[255];
        LSINGLE,LMULTI,LRACE,LCTF,LTOTAL:BYTE;
-       LFROM:ARRAY[1..9]OF BYTE;
-       LTO:ARRAY[1..9]OF BYTE;
+       LFROM:ARRAY[1..10]OF BYTE;
+       LTO:ARRAY[1..10]OF BYTE;
        SPRSIZE:BYTE;
        SPRITE:ARRAY[1..8]OF BYTE;
        ENDTYPE:INTEGER;
        ENDSTR:STRING[255];
-        ENDDATA:STRING[255];
+       ENDDATA:STRING[255];
+       RES2:STRING[255];
         HINAME:ARRAY[1..3]OF CHAR;
       END {B} =
        (HEAD:HEADEDIT;
         VERSION:HEADVERSION;
         NAME:'Custom Worm Level';
         DESC:'Not done yet. Obviously.';
+        RES:'';
         LSINGLE:0; LMULTI:0; LRACE:0; LCTF:0; LTOTAL:0;
-        LFROM:(0,0,0,0,0,0,0,0,0);
-        LTO:(0,0,0,0,0,0,0,0,0);
+        LFROM:(0,0,0,0,0,0,0,0,0,0);
+        LTO:(0,0,0,0,0,0,0,0,0,0);
         SPRSIZE:4;
         SPRITE:(6*16,15*16,15*16,6*16,0,0,0,0);
           {01100000
@@ -88,6 +91,7 @@ CONST GAMETYPE:ARRAY[1..9]OF STRING[12] =
         ENDTYPE:0;
          ENDSTR:'';
         ENDDATA:#$C9;
+        RES2:'';
         HINAME:'WOR');
 
       LVLPOS:BYTE = 1;
@@ -130,7 +134,7 @@ BEGIN
   TEXTCOLOR(CB_BAR); WRITE('>�����������������������������');
   WINDOW(41,2,41,25); TEXTCOLOR(C_TEXT); TEXTBACKGROUND(CB_TEXT); WRITE(CC('�',23));
   WINDOW(1,25,80,25); TEXTBACKGROUND(CB_BAR); CLRSCR;
-  GOTOXY(74,1); TEXTCOLOR(0); WRITE('v0.51�'); TEXTBACKGROUND(CB_TEXT);
+  GOTOXY(74,1); TEXTCOLOR(0); WRITE('v0.53�'); TEXTBACKGROUND(CB_TEXT);
 END; {MAINTITLE}
 
 PROCEDURE PUTPIXEL(X,Y:INTEGER;COL:BYTE;WHERE:POINTER);
@@ -328,11 +332,13 @@ BEGIN
   SETPAL(18,48,48,48);         SETPAL(19,63,0,0); {OBJ}
   SETPAL(20,63,63,20);         SETPAL(21,63,16,0); {HL_OBJ}
   SETPAL(22,63,63,63);         SETPAL(23,63,0,0); {BORDER}
+
+  SETPAL(29,0,48,0); {MARK}
 END; {DISPMCGACOMMON}
 
 PROCEDURE DISP1MAP(OBJ:INTEGER);
-VAR MXX,MYY:WORD;
-    M1,M2:BOOLEAN;
+VAR MXX,MYY,TX,TY,TXX,TYY:WORD;
+    M1,M2,TZ:BOOLEAN;
 {TYPE SCRN = ARRAY[0..199,0..319]OF BYTE;
 VAR VIRT:^SCRN;
     I1,I1X,I1Y:BYTE;
@@ -366,7 +372,20 @@ BEGIN
       IF M2 THEN PPLINE(MXX,MYY,MX,MY,1);
       MXX:=MX; MYY:=MY;
     END; {MOUSE}
-  UNTIL KEYPRESSED; WHILE KEYPRESSED DO READKEY; MAINTITLE;
+    C:=#0;
+    IF KEYPRESSED THEN BEGIN
+      WHILE KEYPRESSED DO C:=READKEY;
+      IF C='1'THEN BEGIN
+       I4:=L[II].SPRSIZE; IF I4=0THEN I4:=B.SPRSIZE; DEC(I4);
+        FOR TX:=2TO L[II].FIELDX-4 DO FOR TY:=2TO L[II].FIELDY-4 DO BEGIN
+          TZ:=TRUE;
+          FOR TXX:=TX TO TX+I4 DO FOR TYY:=TY TO TY+I4 DO
+            IF GETPIXEL(TXX,TYY,VGA)>17THEN TZ:=FALSE;
+          IF TZ THEN PUTPIXEL(TX,TY,29,PTR(VGA,0));
+        END; {TEST_FIELD}
+      END; {DRAW_TEST_PEA_AREA}
+    END; {KEYPRESSED}
+  UNTIL(C=#27)OR(C=' ')OR(C=#13)OR(C='+')OR(C='0'); MAINTITLE;
 END; {DISP1MAP}
 
 PROCEDURE DISPMANYMAP(MAG:BYTE);
@@ -508,6 +527,7 @@ BEGIN
     6:WRITE('PRESS LEFT AND RIGHT TO VIEW ALL OBJECTS');
     8:WRITE('PRESS LEFT AND RIGHT TO VIEW ALL BOUNCIES');
   END; {TEXT TO DISPLAY}
+  WINDOW(2,3,3,20);
 END; {HELPBAR}
 
 PROCEDURE DISPLEVELS;
@@ -598,12 +618,6 @@ FUNCTION COMPSIZE:WORD;
 BEGIN
   I:=B.SPRSIZE+1;
   IF B.LFROM[1]>0THEN FOR II:=B.LFROM[1]TO B.LSINGLE DO INC(I,L[II].SIZE); {SP}
-  IF B.LMULTI>0THEN FOR II:=B.LSINGLE+1TO B.LSINGLE+B.LMULTI DO INC(I,L[II].SIZE); {MP}
-  IF B.LFROM[8]>0THEN
-   FOR II:=B.LSINGLE+B.LMULTI+B.LFROM[8]TO B.LSINGLE+B.LMULTI+B.LTO[8]DO INC(I,L[II].SIZE); {RACE}
-  IF B.LFROM[9]>0THEN
-   FOR II:=B.LSINGLE+B.LMULTI+B.LRACE+B.LFROM[9]TO B.LSINGLE+B.LMULTI+B.LRACE+B.LTO[9]DO INC(I,L[II].SIZE); {CTF}
-
 {MAKE SP_END CODE}
   CASE B.ENDTYPE OF
     1:B.ENDDATA:=#$21+CHR(LO(PC+10+I))+CHR(HI(PC+10+I))+#$CD+#$37+#$4A+#$C3+#$AA+#$55+B.ENDSTR+#0;
@@ -615,6 +629,12 @@ BEGIN
   END; {ENDTYPE}
   INC(I,ORD(B.ENDDATA[0]));
 
+  IF B.LMULTI>0THEN FOR II:=B.LSINGLE+1TO B.LSINGLE+B.LMULTI DO INC(I,L[II].SIZE); {MP}
+  IF B.LFROM[8]>0THEN
+   FOR II:=B.LSINGLE+B.LMULTI+B.LFROM[8]TO B.LSINGLE+B.LMULTI+B.LTO[8]DO INC(I,L[II].SIZE); {RACE}
+  IF B.LFROM[9]>0THEN
+   FOR II:=B.LSINGLE+B.LMULTI+B.LRACE+B.LFROM[9]TO B.LSINGLE+B.LMULTI+B.LRACE+B.LTO[9]DO INC(I,L[II].SIZE); {CTF}
+
   INC(I,$35+ORD(B.NAME[0])+ORD(B.DESC[0]));
   IF B.LFROM[1]>0THEN INC(I,5); {HI_SP}
   IF B.LFROM[2]>0THEN I:=I+((1+B.LTO[2]-B.LFROM[2])*5); {HI_PW}
@@ -744,7 +764,7 @@ BEGIN
       B.LFROM[8]:=INPUTINT('ENTER STARTING LEVEL','USUALLY 1 UNLESS YOU WANT TO SKIP LEVELS0=NO LEVELS',0,1,B.LRACE);
       IF B.LFROM[8]>0THEN
         B.LTO[8]:=INPUTINT('ENTER LAST LEVEL','',B.LFROM[8],B.LRACE,B.LRACE);
-    END {RACE} ELSE IF III=8THEN BEGIN
+    END {RACE} ELSE IF III=9THEN BEGIN
       B.LFROM[9]:=INPUTINT('ENTER STARTING LEVEL','USUALLY 1 UNLESS YOU WANT TO SKIP LEVELS0=NO LEVELS',0,1,B.LCTF);
       IF B.LFROM[9]>0THEN
         B.LTO[9]:=INPUTINT('ENTER LAST LEVEL','',B.LFROM[9],B.LCTF,B.LCTF);
@@ -1186,7 +1206,8 @@ BEGIN
            FOR I:=B.LTOTAL DOWNTO B.LSINGLE+B.LMULTI+1DO L[I]:=L[I-1];
            L[B.LSINGLE+B.LMULTI]:=L[II]; II:=B.LSINGLE+B.LMULTI;
          END {MP} ELSE IF II<=B.LSINGLE+B.LMULTI+B.LRACE THEN BEGIN
-           INC(B.LRACE); L[B.LTOTAL]:=L[II]; II:=B.LTOTAL;
+           INC(B.LRACE); FOR I:=B.LTOTAL DOWNTO B.LSINGLE+B.LMULTI+B.LRACE+1DO L[I]:=L[I-1];
+           L[B.LSINGLE+B.LMULTI+B.LRACE]:=L[II]; II:=B.LSINGLE+B.LMULTI+B.LRACE;
          END {RACE} ELSE BEGIN
            INC(B.LCTF); L[B.LTOTAL]:=L[II]; II:=B.LTOTAL;
          END; {CTF}
@@ -1378,11 +1399,16 @@ BEGIN
   END; {CAN'T OPEN}
   {$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
+  IF IORESULT<>0THEN BEGIN
     TEXTCOLOR(C_HI); WRITE('WARNING!! '); TEXTCOLOR(C_TEXT);
     WRITELN('ERROR READING LEVEL FILE!');
     CLOSE(F); HALT;
   END; {ERROR}
+  IF B.HEAD<>HEADEDIT THEN BEGIN
+    TEXTCOLOR(C_HI); WRITE('WARNING!! '); TEXTCOLOR(C_TEXT);
+    WRITELN('WRONG HEADER!');
+    CLOSE(F); HALT;
+  END; {ERROR}
   IF B.VERSION<>HEADVERSION THEN BEGIN
     WRITELN('CAN''T READ FILE VERSION ',B.VERSION,'.'); CLOSE(F); HALT;
   END; {VERSION}
@@ -1588,6 +1614,6 @@ BEGIN
   TEXTCOLOR(C_MENU); WRITE('3'); TEXTCOLOR(C_TEXT); WRITELN(': SEARCHING FOR LEVELS');
   EDITFILE(TRUE); REPEAT EDITMAIN; EDITQUIT; UNTIL QUITOK=TRUE;
   WINDOW(1,1,80,25); TEXTCOLOR(7); TEXTBACKGROUND(0); CLRSCR;
-  WRITE('EXITING '); TEXTCOLOR(15); WRITE('WORMEDIT 0.51 BY SHIAR');
+  WRITE('EXITING '); TEXTCOLOR(15); WRITE('WORMEDIT 0.53 BY SHIAR');
   TEXTCOLOR(7); WRITELN('.'); WRITELN('BYEBYE..'); WRITELN;
 END.
\ No newline at end of file