wormedit 0.53
authorMischa Poslawsky <wormy@shiar.org>
Sat, 19 Jan 2002 18:53:46 +0000 (19:53 +0100)
committerMischa Poslawsky <wormy@shiar.org>
Mon, 2 Mar 2009 21:36:22 +0000 (22:36 +0100)
Add public worm5253 script to convert levels in the old v0.95 format,
because such files are already circulating.

worm5253.pas [new file with mode: 0644]
wormedit.pas
wormy001.lvl
wormy002.lvl
wormy003.lvl

diff --git a/worm5253.pas b/worm5253.pas
new file mode 100644 (file)
index 0000000..a4dd8c0
--- /dev/null
@@ -0,0 +1,113 @@
+USES CRT,SHIAR,DOS;
+
+TYPE ONELEVEL52 = RECORD
+       ID:STRING[22];
+       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 {..128}
+        TYP:SHORTINT;X1,Y1,X2,Y2:BYTE;
+       END; {OBJ}
+     END; {ONELEVEL}
+
+     B52 = RECORD
+       A:ARRAY[1..15]OF CHAR;
+       B:BYTE;
+       C:ARRAY[1..98]OF BYTE; {256}
+       D:ARRAY[1..14]OF BYTE; {1}
+       E:ARRAY[1..9]OF BYTE; {1}
+       F:ARRAY[1..523]OF BYTE; {256}
+       G:ARRAY[1..3]OF BYTE;
+     END; {B}
+
+
+CONST HEADEDIT52 = ('WormEdit�95'+#0+'LVL');
+      HEADVERSION = 95;
+
+
+VAR I,II,I2:WORD;
+    C:CHAR;
+    FILENAME,S:STRING;
+    F:FILE;
+    L:ARRAY[1..64]OF ONELEVEL52;
+    B:B52;
+
+
+
+FUNCTION STR2BYTE(SPRITE:STRING):BYTE;
+VAR SPRTEMP,SPRTEMP2:BYTE;
+BEGIN
+  SPRTEMP:=0; SPRTEMP2:=1;
+  FOR SPRTEMP2:=1TO LENGTH(SPRITE)DO
+    IF SPRITE[SPRTEMP2]='1'THEN INC(SPRTEMP,1SHL(8-SPRTEMP2));
+  STR2BYTE:=SPRTEMP;
+END; {STR2BYTE}
+
+PROCEDURE OPENFILE;
+BEGIN
+  ASSIGN(F,FILENAME); {$I-} RESET(F,1); {$I+} I:=IORESULT;
+  IF I<>0THEN BEGIN
+    TEXTCOLOR(15); WRITE('WARNING!! '); TEXTCOLOR(7);
+    WRITELN('FAILED OPENING LEVEL FILE ',FILENAME,'!'); WRITELN('RUNTIME ERROR #',I); HALT;
+  END; {CAN'T OPEN}
+  WRITELN('OPENING ',FILENAME);
+  {$I-} BLOCKREAD(F,B,SIZEOF(B));
+        FOR I:=1TO B.D[5]DO BLOCKREAD(F,L[I],SIZEOF(L[I])); {$I+}
+  IF(IORESULT<>0)OR(B.A<>HEADEDIT52)THEN BEGIN
+    TEXTCOLOR(15); WRITE('WARNING!! '); TEXTCOLOR(7);
+    WRITELN('ERROR READING LEVEL FILE!'); CLOSE(F); HALT;
+  END; {ERROR}
+  IF B.B<>HEADVERSION THEN BEGIN
+    WRITELN('CAN''T READ FILE VERSION ',B.B,'.'); CLOSE(F); HALT;
+  END; {VERSION}
+  CLOSE(F);
+  WRITELN('OPENED V',B.B,' SUCESSFULLY - ',B.D[5],' LEVELS FOUND');
+END; {OPENFILE}
+
+PROCEDURE FILESAVE;
+BEGIN
+  ASSIGN(F,FILENAME); REWRITE(F,1);
+  S:='WormEdit053'+#0+'LVL';
+  BLOCKWRITE(F,S[1],SIZEOF(B.A));
+  B.B:=53;
+  BLOCKWRITE(F,B.B,SIZEOF(B.B));
+  BLOCKWRITE(F,B.C,SIZEOF(B.C));
+  II:=0; FOR I:=1TO 128DO BLOCKWRITE(F,II,2);
+  BLOCKWRITE(F,B.D,SIZEOF(B.D));
+    BLOCKWRITE(F,II,1);
+  BLOCKWRITE(F,B.E,SIZEOF(B.E));
+    BLOCKWRITE(F,II,1);
+  BLOCKWRITE(F,B.F,SIZEOF(B.F));
+    FOR I:=1TO 128DO BLOCKWRITE(F,II,2);
+  BLOCKWRITE(F,B.G,SIZEOF(B.G));
+  FOR I:=1TO B.D[5]DO BEGIN
+    BLOCKWRITE(F,L[I],SIZEOF(L[I]));
+    FOR I2:=1TO 5*48DO BLOCKWRITE(F,II,2);
+  END; {}
+  CLOSE(F);
+  WRITELN(FILENAME,' REWRITTEN AS V',B.B);
+END; {FILESAVE}
+
+
+BEGIN
+ {$M 16384,0,655360}
+  WINDOW(1,1,80,25); TEXTCOLOR(7); TEXTBACKGROUND(0); CLRSCR;
+  WRITELN('V52 TO V53 CONVERTER - BY SHIAR');
+  FILENAME:=PARAMSTR(1);
+  OPENFILE; FILESAVE;
+  WRITELN('ALL DONE. ENJOY!');
+END.
\ No newline at end of file
index 35e496a23c7cfa824724c240a5158bd7c83a9819..b8f5cfbc193c8001e1165f405d9ddd57fac211a9 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,19 @@ BEGIN
       IF M2 THEN PPLINE(MXX,MYY,MX,MY,1);
       MXX:=MX; MYY:=MY;
     END; {MOUSE}
-  UNTIL KEYPRESSED; WHILE KEYPRESSED DO READKEY; MAINTITLE;
+    IF KEYPRESSED THEN BEGIN C:=#0;
+      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 +526,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;
@@ -1378,11 +1397,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 +1612,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
index bb3b1aff5cd956a6b90baf36ec457ee0a3afb0e9..bc4e5d4387d186a4c57bb6c84461ccf8261b8eaa 100644 (file)
Binary files a/wormy001.lvl and b/wormy001.lvl differ
index 3bf91d17da8ec3300d957d7c244980c27d0bedc0..27ec3cc56080ad03fa579505773837a46f3423a4 100644 (file)
Binary files a/wormy002.lvl and b/wormy002.lvl differ
index d9a5743a788e8512a18891c2c13a53ecc448b59a..c66d9816e2c32e7aee297503a08741f3450bc9db 100644 (file)
Binary files a/wormy003.lvl and b/wormy003.lvl differ