@@ -67,6 +67,15 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
6767 println ! ( "map version = {}" , bsp_reader. header( ) . version) ;
6868 println ! ( "map revision = {}" , bsp_reader. header( ) . map_revision) ;
6969
70+ println ! ( "===" ) ;
71+
72+ for ( i, lump) in bsp_reader. header ( ) . lumps . iter ( ) . enumerate ( ) {
73+ println ! (
74+ "lump #{i}: off={} len={} ident={:?}" ,
75+ lump. off, lump. len, lump. ident
76+ ) ;
77+ }
78+
7079 Ok ( ( ) )
7180 }
7281 SubCommand :: ListPackedFiles ( t) => {
@@ -106,8 +115,15 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
106115 . to_owned ( )
107116 } ) ;
108117
109- // generate lump file
118+ // create a new slice where worldspawn (i.e. entity number one) is kept in the entity lump
119+ let mut slice = bsp. lump_slice ( LumpIndex :: LUMP_ENTITIES ) ;
120+ let brace_pos = slice. iter ( ) . position ( |b| * b == b'}' ) ;
121+ let new_slice = match brace_pos {
122+ Some ( p) => slice[ 0 ..p + 1 ] . to_owned ( ) ,
123+ None => Vec :: new ( ) ,
124+ } ;
110125
126+ // generate extracted lump file
111127 let lump_header = & bsp. header . lumps [ LumpIndex :: LUMP_ENTITIES as usize ] ;
112128 let lump_file = File :: create ( lump_output) ?;
113129 let mut lump_writer = BufWriter :: new ( lump_file) ;
@@ -118,13 +134,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
118134 lump_writer. write_u32 :: < LittleEndian > ( lump_header. len ) ?; // lumpLength
119135 lump_writer. write_u32 :: < LittleEndian > ( bsp. header . map_revision ) ?; // mapRevision
120136
121- io:: copy (
122- & mut bsp. lump_slice ( LumpIndex :: LUMP_ENTITIES ) ,
123- & mut lump_writer,
124- ) ?;
137+ io:: copy ( & mut slice, & mut lump_writer) ?;
125138
126- // remove entity lump from input bsp
127- bsp. replace_lump ( LumpIndex :: LUMP_ENTITIES , & [ ] ) ;
139+ // replace bsp entity lump with a stripped one
140+ bsp. replace_lump ( LumpIndex :: LUMP_ENTITIES , & new_slice ) ;
128141
129142 let lump_file = File :: create ( t. output ) ?;
130143 let mut lump_writer = BufWriter :: new ( lump_file) ;
0 commit comments