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