From 387734e68f6afd4ac473d5a36dcff573711235c9 Mon Sep 17 00:00:00 2001 From: dpethes Date: Thu, 9 Oct 2014 22:32:20 +0200 Subject: [PATCH] add command-line HOB parsing program, dump face data --- hob_parser/hob_parser.lpi | 72 +++++++++++++++++++++++++++++++++++++++ hob_parser/hob_parser.pas | 22 ++++++++---- hob_parser/main.pas | 21 ++++++++++++ 3 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 hob_parser/hob_parser.lpi create mode 100644 hob_parser/main.pas diff --git a/hob_parser/hob_parser.lpi b/hob_parser/hob_parser.lpi new file mode 100644 index 0000000..ef4eecf --- /dev/null +++ b/hob_parser/hob_parser.lpi @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + <UseAppBundle Value="False"/> + <ResourceType Value="res"/> + </General> + <i18n> + <EnableI18N LFM="False"/> + </i18n> + <VersionInfo> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + </local> + </RunParams> + <Units Count="1"> + <Unit0> + <Filename Value="main.pas"/> + <IsPartOfProject Value="True"/> + <UnitName Value="parse_hob"/> + </Unit0> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="hob_parser"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/hob_parser/hob_parser.pas b/hob_parser/hob_parser.pas index 0a892ab..dc91fbf 100644 --- a/hob_parser/hob_parser.pas +++ b/hob_parser/hob_parser.pas @@ -43,16 +43,24 @@ begin face.b2 := f.ReadByte; //51/71 face.b3 := f.ReadByte; //0C face.bsize := f.ReadByte * 4; //block size: A = 40B, 9 = 36 - f.ReadWord; //? - f.ReadWord; //increasing after 4 faces? + + write(face.dw1:8, face.b1:3, face.b2:3, face.b3:3, face.bsize:3); + write(f.ReadWord:4); + write(f.ReadWord:4); +// f.ReadWord; //? +// f.ReadWord; //increasing after 4 faces? //12B - for k := 0 to 3 do + for k := 0 to 3 do begin face.indices[k] := f.ReadWord; + write(face.indices[k]:4, '-'); + end; //20B - for k := 0 to face.bsize - 20 - 1 do - f.ReadByte; + for k := 0 to face.bsize - 20 - 1 do begin + write(f.ReadByte:3, ','); + end; hob.faces[i] := face; + writeln; end; end; @@ -68,11 +76,13 @@ begin f.LoadFromFile(fname); //faces - f.Seek(756, fsFromBeginning); //faceblock start + f.Seek(428, fsFromBeginning); //faceblock start { 428 - 1ky.hob 1604 - hvyshut prbdroid: 756 + wmvwng: 1648 + xwing: 18304 } hob.face_block_offset := f.ReadDWord; //filepos + 4 hob.face_count := f.ReadDWord; //face count diff --git a/hob_parser/main.pas b/hob_parser/main.pas new file mode 100644 index 0000000..22322c7 --- /dev/null +++ b/hob_parser/main.pas @@ -0,0 +1,21 @@ +program parse_hob; + +uses + sysutils, hob_parser; + +var + fname: string; + hob: THobFile; + +begin + if ParamCount < 1 then begin + writeln ('no input file specified'); + exit; + end; + + fname := ParamStr(1); + writeln('parsing file: ', fname); + hob := ParseHobFile(fname); + writeln('done.'); +end. +