home *** CD-ROM | disk | FTP | other *** search
- uses crt,extras;
-
- const
- desc:array [1..13] of string=
- (('1: Version '),
- ('2: Skill level (0-4)'),
- ('3: Episode (always 1 in Doom 2)'),
- ('4: Map# (1-9 Doom 1-32 Doom 2)'),
- ('5: Mode (0=single or coop 1=deathmatch 2=altdeath)'),
- ('6: Respawn (0=no else yes)'),
- ('7: Fast (0=no else yes)'),
- ('8: Nomonsters (0=no else yes)'),
- ('9: Viewpoint (0-3)'),
- ('10: Player 1 present (0=no 1=yes)'),
- ('11: Player 2 present (0=no 1=yes)'),
- ('12: Player 3 present (0=no 1=yes)'),
- ('13: Player 4 present (0=no 1=yes)'));
-
- desc2:array[1..8] of string=
-
- (('1: Skill level (0-4)'),
- ('2: Episode (always 1 in Doom 2)'),
- ('3: Map# (1-9 Doom 1-32 Doom 2)'),
- ('4: Player 1 present (0=no 1=yes)'),
- ('5: Player 2 present (0=no 1=yes)'),
- ('6: Player 3 present (0=no 1=yes)'),
- ('7: Player 4 present (0=no 1=yes)'),
- ('8 Version = 1.2 and before'));
-
- var
- inlmp,outlmp:text;
- i,ln:integer;
- FromF, ToF: file;
- NumRead, NumWritten: Word;
- buf: array[1..2048] of Char;
- num,new,bytenum,ver:byte;
- done,fileexists:boolean;
- vers:string;
-
- procedure usage;
- begin
- clrscr;
- writeln(center('Lmp fiddler 1.0 by Ryan Robinson'));
- writeln;
- if not fileexists then writeln((paramstr(1)+'.lmp'),' not found!');
- if (paramcount <> 0) and (paramcount <> 2) then writeln('Invalid parameter');
- writeln('Usage: lmp <source file> <target file or -v to view>');
- writeln('Filenames should not have an extension.');
- writeln('An lmp extension is assumed');
- halt;
- end;
-
- procedure change;
- begin
- Write ('Which Number? ');
- Readln (num);
- if (num < 0) or (num >= 14) then exit;
- if (ord(buf[1]) >= 104) and (Num=1) then
- begin
- repeat
- write('Which version? (10#=first decimal) > ');
- readln(ver);
- until (ver<=109) and (ver>=100);
- if ver >= 104 then
- begin
- if not yes('Are you sure? ') then exit;
- buf[1]:=chr(ver);
- end
- else
- begin
- if not yes('Are you sure? ') then exit;
- Writeln('Converting...');
- buf[1]:=buf[2];
- buf[2]:=buf[3];
- buf[3]:=buf[4];
- buf[4]:=buf[10];
- buf[5]:=buf[11];
- buf[6]:=buf[12];
- buf[7]:=buf[13];
- buf[8]:=#0;
- buf[9]:=#0;
- buf[10]:=#0;
- buf[11]:=#0;
- buf[12]:=#0;
- buf[13]:=#0;
- exit;
- end;
- end
- else
- Begin
- if num=8 then
- begin
- writeln(desc2[8]);
- repeat
- write('Version? (10#=first decimal) ');
- readln(ver);
- until (ver<=109) and (ver>=100);
- if (ver<104) then
- begin
- Writeln('Before 1.4 beta, version didn''t matter!');
- writeln('No need to do anything. Press a key');
- repeat until keypressed;
- exit;
- end
- else
- begin
- if not yes('Are you sure? ') then exit;
- writeln('Converting...');
- buf[13]:=buf[7];
- buf[12]:=buf[6];
- buf[11]:=buf[5];
- buf[10]:=buf[4];
- buf[9]:=chr(0);
- buf[8]:=chr(0);
- buf[7]:=chr(0);
- buf[6]:=chr(0);
- buf[5]:=chr(0);
- buf[4]:=buf[3];
- buf[3]:=buf[2];
- buf[2]:=buf[1];
- buf[1]:=chr(ver);
- exit;
- end;
- end;
- writeln;
- if (ord(buf[1]) >= 104) then
- writeln(desc[num],' = ',ord(buf[num]))
- else
- writeln(desc2[num],' = ',ord(buf[num]));
- write ('New Setting? ');
- readln(new);
- if yes('Correct? ') then buf[num]:=chr(new);
- End;
-
- end;
-
- begin {main program}
- if paramcount<>2 then usage;
- ln:=0;
- fileexists:=exist(paramstr(1)+'.lmp');
- if not fileexists then usage;
- assign(FromF, (ParamStr(1)+'.lmp'));
- Reset(FromF, 1);
- if (paramstr(2))<>'-v' then
- begin
- Assign(ToF, (ParamStr(2)+'.lmp'));
- Rewrite(ToF, 1);
- end;
- repeat
- begin;
- ln:=ln+1;
- BlockRead(FromF,buf, SizeOf(buf),NumRead);
- if ln=1 then
- begin
- repeat
- begin
- clrscr;
- writeln(center('Lmp fiddler 1.0 by Ryan Robinson'));
- writeln;
- writeln((paramstr(1)+'.lmp'));
- writeln(repeatchar('=',length((paramstr(1)+'.lmp'))));
- if (ord(buf[1]) >= 100) and (ord(buf[1]) <= 109) then
- begin
- for i:=1 to 13 do
- begin
- write(desc[i],' = ');
- case i of
- 1:
- begin
- writeln('1.',((ord(buf[1]))-100));
- end
- else writeln(ord(buf[i]))
- end{case}
- end;
- end
- else if ord(buf[1]) <= 4 then
- begin
- for i:=1 to 8 do
- begin
- if i=8 then writeln(desc2[i])
- else write(desc2[i]);
- if i <> 8 then write(' = ',ord(buf[i]))
-
-
- end;
- end
- else
- begin
- writeln('Invalid Demo File!');
- halt;
- end;
- if (paramstr(2)='-v') then halt;
- done:=not(yes('Change settings? '));
- if done=false then
- begin
- ver:=ord(buf[1]);
- change;
- end
- end
- until done=true;
- WriteLn('Copying ', FileSize(FromF),' bytes...');
- Write((paramstr(1)+'.lmp'),'==>',(paramstr(2)+'.lmp '));
- end;
- BlockWrite(ToF,buf,NumRead,NumWritten);
- end
- until (NumRead = 0) or (NumWritten <> NumRead);
- if filesize(fromf)=filesize(tof) then writeln('OK')
- else
- if filesize(fromf)=(filesize(tof)+6) then writeln('OK')
- else writeln('Error! File sizes do not match!');
- Close(FromF);
- Close(ToF);
- end.
-