DEADSOFTWARE

relaxed map reader, so "bloodlust", for example, is working now
[d2df-sdl.git] / src / tools / mapgen.dpr
1 {$INCLUDE ../shared/a_modes.inc}
2 {$APPTYPE CONSOLE}
4 uses
5 SysUtils, Classes,
6 xstreams in '../shared/xstreams.pas',
7 xparser in '../shared/xparser.pas',
8 xdynrec in '../shared/xdynrec.pas',
9 utils in '../shared/utils.pas',
10 conbuf in '../shared/conbuf.pas',
11 e_log in '../engine/e_log.pas';
14 // ////////////////////////////////////////////////////////////////////////// //
15 var
16 pr: TTextParser;
17 dfmapdef: TDynMapDef;
18 fo: TextFile;
19 st: TStream = nil;
20 ch: AnsiChar;
21 wdt: Integer;
22 s: AnsiString;
23 begin
24 //writeln(getFilenamePath(ParamStr(0)), '|');
26 e_InitWritelnDriver();
27 conbufDumpToStdOut := true;
28 conbufConPrefix := false;
30 writeln('parsing "mapdef.txt"...');
31 try
32 st := openDiskFileRO('mapdef.txt');
33 writeln('found: local mapdef');
34 except // sorry
35 st := nil;
36 end;
37 try
38 writeln(filenameConcat(getFilenamePath(ParamStr(0)), '../mapdef/mapdef.txt'), '|');
39 st := openDiskFileRO(filenameConcat(getFilenamePath(ParamStr(0)), '../mapdef/mapdef.txt'));
40 writeln('found: system mapdef');
41 except // sorry
42 writeln('FATAL: mapdef not found!');
43 end;
45 pr := TFileTextParser.Create(st, false); // don't own
46 try
47 dfmapdef := TDynMapDef.Create(pr);
48 except on e: Exception do
49 begin
50 writeln('ERROR at (', pr.line, ',', pr.col, '): ', e.message);
51 Halt(1);
52 end;
53 end;
54 pr.Free();
56 writeln('writing "mapdef.inc"...');
57 AssignFile(fo, 'mapdef.inc');
58 Rewrite(fo);
59 write(fo, '// *** WARNING! ***'#10);
60 write(fo, '// regenerate this part directly from "mapdef.txt" with ''mapgen'', NEVER manually change anything here!'#10#10#10);
61 write(fo, dfmapdef.pasdef);
63 //st := openDiskFileRO('mapdef.txt');
64 st.position := 0;
65 write(fo, #10#10'const defaultMapDef: AnsiString = ''''+'#10' ');
66 wdt := 2;
67 while true do
68 begin
69 if (st.Read(ch, 1) <> 1) then break;
70 s := formatstrf('#%d', [Byte(ch)]);
71 if (wdt+Length(s) > 78) then begin wdt := 2; write(fo, '+'#10' '); end;
72 write(fo, s);
73 Inc(wdt, Length(s));
74 end;
75 write(fo, #10';');
77 CloseFile(fo);
78 end.