home *** CD-ROM | disk | FTP | other *** search
/ The Best of Select: Games 9 / CD_1.iso / wads / doom / lmp.pas < prev    next >
Pascal/Delphi Source File  |  1995-08-22  |  7KB  |  214 lines

  1. uses crt,extras;
  2.  
  3. const
  4.   desc:array [1..13] of string=
  5.     (('1:  Version '),
  6.      ('2:  Skill level (0-4)'),
  7.      ('3:  Episode (always 1 in Doom 2)'),
  8.      ('4:  Map# (1-9 Doom 1-32 Doom 2)'),
  9.      ('5:  Mode (0=single or coop 1=deathmatch 2=altdeath)'),
  10.      ('6:  Respawn (0=no else yes)'),
  11.      ('7:  Fast (0=no else yes)'),
  12.      ('8:  Nomonsters (0=no else yes)'),
  13.      ('9:  Viewpoint (0-3)'),
  14.      ('10: Player 1 present (0=no 1=yes)'),
  15.      ('11: Player 2 present (0=no 1=yes)'),
  16.      ('12: Player 3 present (0=no 1=yes)'),
  17.      ('13: Player 4 present (0=no 1=yes)'));
  18.  
  19.   desc2:array[1..8] of string=
  20.      
  21.      (('1: Skill level (0-4)'),
  22.      ('2: Episode (always 1 in Doom 2)'),
  23.      ('3: Map# (1-9 Doom 1-32 Doom 2)'),
  24.      ('4: Player 1 present (0=no 1=yes)'),
  25.      ('5: Player 2 present (0=no 1=yes)'),
  26.      ('6: Player 3 present (0=no 1=yes)'),
  27.      ('7: Player 4 present (0=no 1=yes)'),
  28.      ('8 Version = 1.2 and before'));     
  29.  
  30. var
  31.   inlmp,outlmp:text;
  32.   i,ln:integer;
  33.   FromF, ToF: file;
  34.   NumRead, NumWritten: Word;
  35.   buf: array[1..2048] of Char;
  36.   num,new,bytenum,ver:byte;
  37.   done,fileexists:boolean;
  38.   vers:string;
  39.  
  40. procedure usage;
  41.   begin
  42.     clrscr;
  43.     writeln(center('Lmp fiddler 1.0 by Ryan Robinson'));
  44.     writeln;
  45.     if not fileexists then writeln((paramstr(1)+'.lmp'),' not found!');
  46.     if (paramcount <> 0) and (paramcount <> 2) then writeln('Invalid parameter');
  47.     writeln('Usage: lmp <source file> <target file or -v to view>');
  48.     writeln('Filenames should not have an extension.');
  49.     writeln('An lmp extension is assumed');
  50.     halt;
  51.   end;
  52.  
  53. procedure change;
  54.   begin
  55.     Write ('Which Number? ');
  56.     Readln (num);
  57.     if (num < 0) or (num >= 14) then exit;
  58.     if (ord(buf[1]) >= 104) and (Num=1) then
  59.       begin
  60.         repeat
  61.           write('Which version? (10#=first decimal) > ');
  62.           readln(ver);
  63.         until (ver<=109) and (ver>=100);
  64.         if ver >= 104 then
  65.           begin
  66.             if not yes('Are you sure? ') then exit;
  67.             buf[1]:=chr(ver);
  68.           end
  69.         else
  70.           begin
  71.             if not yes('Are you sure? ') then exit;
  72.             Writeln('Converting...');
  73.             buf[1]:=buf[2];
  74.             buf[2]:=buf[3];
  75.             buf[3]:=buf[4];
  76.             buf[4]:=buf[10];
  77.             buf[5]:=buf[11];
  78.             buf[6]:=buf[12];
  79.             buf[7]:=buf[13];
  80.             buf[8]:=#0;
  81.             buf[9]:=#0;
  82.             buf[10]:=#0;
  83.             buf[11]:=#0;
  84.             buf[12]:=#0;
  85.             buf[13]:=#0;
  86.             exit;
  87.           end;
  88.       end
  89.     else
  90.       Begin
  91.         if num=8 then
  92.           begin
  93.             writeln(desc2[8]);
  94.             repeat
  95.             write('Version? (10#=first decimal) ');
  96.             readln(ver);
  97.             until (ver<=109) and (ver>=100);
  98.             if (ver<104) then
  99.               begin
  100.                 Writeln('Before 1.4 beta, version didn''t matter!');
  101.                 writeln('No need to do anything. Press a key');
  102.                 repeat until keypressed;
  103.                 exit;
  104.               end
  105.             else
  106.               begin
  107.                 if not yes('Are you sure? ') then exit;
  108.                 writeln('Converting...');
  109.                 buf[13]:=buf[7];
  110.                 buf[12]:=buf[6];
  111.                 buf[11]:=buf[5];
  112.                 buf[10]:=buf[4];
  113.                 buf[9]:=chr(0);
  114.                 buf[8]:=chr(0);
  115.                 buf[7]:=chr(0);
  116.                 buf[6]:=chr(0);
  117.                 buf[5]:=chr(0);
  118.                 buf[4]:=buf[3];
  119.                 buf[3]:=buf[2];
  120.                 buf[2]:=buf[1];
  121.                 buf[1]:=chr(ver);
  122.                 exit;
  123.               end;
  124.           end;
  125.         writeln;
  126.         if (ord(buf[1]) >= 104) then
  127.           writeln(desc[num],' = ',ord(buf[num]))
  128.         else
  129.           writeln(desc2[num],' = ',ord(buf[num]));
  130.         write ('New Setting? ');
  131.         readln(new);
  132.         if yes('Correct? ') then buf[num]:=chr(new);
  133.       End;
  134.   
  135. end;
  136.  
  137. begin {main program}
  138.   if paramcount<>2 then usage;
  139.   ln:=0;
  140.   fileexists:=exist(paramstr(1)+'.lmp');
  141.   if not fileexists then usage;
  142.   assign(FromF, (ParamStr(1)+'.lmp'));
  143.   Reset(FromF, 1);
  144.   if (paramstr(2))<>'-v' then
  145.   begin
  146.     Assign(ToF, (ParamStr(2)+'.lmp'));
  147.     Rewrite(ToF, 1);
  148.   end;
  149.   repeat
  150.     begin;
  151.       ln:=ln+1;
  152.       BlockRead(FromF,buf, SizeOf(buf),NumRead);
  153.         if ln=1 then
  154.           begin
  155.             repeat
  156.               begin
  157.                 clrscr;
  158.                 writeln(center('Lmp fiddler 1.0 by Ryan Robinson'));
  159.                 writeln;
  160.                 writeln((paramstr(1)+'.lmp'));
  161.                 writeln(repeatchar('=',length((paramstr(1)+'.lmp'))));
  162.                 if (ord(buf[1]) >= 100) and (ord(buf[1]) <= 109) then
  163.                   begin
  164.                     for i:=1 to 13 do
  165.                       begin
  166.                         write(desc[i],' = ');
  167.                         case i of
  168.                           1:
  169.                           begin
  170.                             writeln('1.',((ord(buf[1]))-100));
  171.                           end
  172.                           else writeln(ord(buf[i]))
  173.                         end{case}
  174.                       end;
  175.                   end
  176.                 else if ord(buf[1]) <= 4 then
  177.                   begin
  178.                     for i:=1 to 8 do
  179.                       begin
  180.                         if i=8 then writeln(desc2[i])
  181.                         else write(desc2[i]);
  182.                         if i <> 8 then write(' = ',ord(buf[i]))
  183.                                               
  184.  
  185.                       end;
  186.                   end
  187.                 else
  188.                   begin
  189.                     writeln('Invalid Demo File!');
  190.                     halt;
  191.                   end;
  192.                 if (paramstr(2)='-v') then halt;
  193.                 done:=not(yes('Change settings? '));
  194.                 if done=false then
  195.                   begin
  196.                     ver:=ord(buf[1]);
  197.                     change;
  198.                   end
  199.               end
  200.             until done=true;
  201.             WriteLn('Copying ', FileSize(FromF),' bytes...');
  202.             Write((paramstr(1)+'.lmp'),'==>',(paramstr(2)+'.lmp '));
  203.           end;
  204.         BlockWrite(ToF,buf,NumRead,NumWritten);
  205.     end
  206.   until (NumRead = 0) or (NumWritten <> NumRead);
  207.   if filesize(fromf)=filesize(tof) then writeln('OK')
  208.   else
  209.     if filesize(fromf)=(filesize(tof)+6) then writeln('OK')
  210.     else writeln('Error! File sizes do not match!');
  211.   Close(FromF);
  212.   Close(ToF);
  213. end.
  214.