1 // separated to avoid unnecessary inclusion of scrambler code.
2 #include "xr_reader.h"
3 #include "xr_lzhuf.h"
4 #include "xr_scrambler.h"
5 
6 using namespace xray_re;
7 
open_chunk(uint32_t id,const xr_scrambler & scrambler)8 xr_reader* xr_reader::open_chunk(uint32_t id, const xr_scrambler& scrambler)
9 {
10 	bool compressed;
11 	size_t size = find_chunk(id, &compressed);
12 	if (size == 0)
13 		return 0;
14 	if (compressed) {
15 		uint8_t* temp = new uint8_t[size];
16 		scrambler.decrypt(temp, m_p, size);
17 		uint8_t* data;
18 		size_t real_size;
19 		xr_lzhuf::decompress(data, real_size, temp, size);
20 		delete[] temp;
21 		return new xr_temp_reader(data, real_size);
22 	} else {
23 		return new xr_reader(m_p, size);
24 	}
25 }
26