51 uint16_t
version()
const {
return wldVer; }
56 template<
class ... Args>
59 return implSetEntry(s);
62 template<
class ... Args>
65 return implDirectorySize(s);
75 template<
class ... Arg>
80 template<
class ... Arg>
85 void readNpc(zenkit::DaedalusVm& vm, std::shared_ptr<zenkit::INpc>& npc);
91 void implWrite(
bool i) { implWrite(uint8_t(i ? 1 : 0)); }
92 void implRead (
bool& i) { uint8_t x=0;
read(x); i=(x!=0); }
94 void implWrite(
char i) {
writeBytes(&i,
sizeof(i)); }
95 void implRead (
char& i) {
readBytes (&i,
sizeof(i)); }
97 void implWrite(uint8_t i) {
writeBytes(&i,
sizeof(i)); }
98 void implRead (uint8_t& i) {
readBytes (&i,
sizeof(i)); }
100 void implWrite(uint16_t i) {
writeBytes(&i,
sizeof(i)); }
101 void implRead (uint16_t& i) {
readBytes (&i,
sizeof(i)); }
103 void implWrite(int32_t i) {
writeBytes(&i,
sizeof(i)); }
104 void implRead (int32_t& i) {
readBytes (&i,
sizeof(i)); }
106 void implWrite(uint32_t i) {
writeBytes(&i,
sizeof(i)); }
107 void implRead (uint32_t& i) {
readBytes (&i,
sizeof(i)); }
109 void implWrite(uint64_t i) {
writeBytes(&i,
sizeof(i)); }
110 void implRead (uint64_t& i) {
readBytes (&i,
sizeof(i)); }
112 void implWrite(
float i) {
writeBytes(&i,
sizeof(i)); }
113 void implRead (
float& i) {
readBytes (&i,
sizeof(i)); }
115 void implWrite(zenkit::DaedalusDataType i) {
write((uint32_t) i); }
116 void implRead (zenkit::DaedalusDataType& i) {
read((uint32_t&) i); }
118 template<class T, std::enable_if_t<!std::is_same<T,uint32_t>::value && !std::is_same<T,uint64_t>::value && std::is_same<T,size_t>::value,
bool> =
true>
119 void implWrite(T ) =
delete;
120 template<class T, std::enable_if_t<!std::is_same<T,uint32_t>::value && !std::is_same<T,uint64_t>::value && std::is_same<T,size_t>::value,
bool> =
true>
121 void implRead(T&) =
delete;
140 void implWrite(
const Tempest::Vec3& s) {
writeBytes(&s,
sizeof(s)); }
141 void implRead (Tempest::Vec3& s) {
readBytes (&s,
sizeof(s)); }
143 void implWrite(
const Tempest::Matrix4x4& i) {
writeBytes(&i,
sizeof(i)); }
144 void implRead (Tempest::Matrix4x4& i) {
readBytes (&i,
sizeof(i)); }
146 void implWrite(
const zenkit::AnimationSample& i);
147 void implRead (zenkit::AnimationSample& i);
150 void implWrite(
const std::string& s);
151 void implRead (std::string& s);
153 void implWrite(std::string_view s);
157 void implWrite(
const std::vector<T>& s) {
158 implWriteVec(s,std::is_trivial<T>());
162 void implRead (std::vector<T>& s){
163 implReadVec(s,std::is_trivial<T>());
166 void implWrite(
const std::vector<bool>& s) {
167 uint32_t sz=uint32_t(s.size());
169 for(
size_t i=0; i<s.size(); ++i)
173 void implRead (std::vector<bool>& s) {
177 for(
size_t i=0; i<s.size(); ++i) {
185 void implWriteVec(
const std::vector<T>& s,std::false_type) {
186 uint32_t sz=uint32_t(s.size());
193 void implWriteVec(
const std::vector<T>& s,std::true_type) {
194 uint32_t sz=uint32_t(s.size());
200 void implReadVec(std::vector<T>& s,std::false_type) {
209 void implReadVec(std::vector<T>& s,std::true_type) {
217 template<
class T,
size_t sz>
218 void implWrite(
const T (&s)[sz]) {
219 implWriteArr(s,std::is_trivial<T>());
222 template<
class T,
size_t sz>
223 void implWriteArr(
const T (&s)[sz],std::false_type) {
224 for(
size_t i=0; i<sz; ++i)
228 template<
class T,
size_t sz>
229 void implWriteArr(
const T (&s)[sz],std::true_type) {
233 template<
class T,
size_t sz>
234 void implRead(T (&s)[sz]) {
235 implReadArr(s,std::is_trivial<T>());
238 template<
class T,
size_t sz>
239 void implReadArr(T (&s)[sz],std::false_type) {
240 for(
size_t i=0; i<sz; ++i)
244 template<
class T,
size_t sz>
245 void implReadArr(T (&s)[sz],std::true_type) {
252 void implWrite(
const Tempest::Pixmap& p);
253 void implRead (Tempest::Pixmap& p);
255 void implWrite(
const zenkit::INpc& h);
257 void implWrite(
const FpLock& fp);
258 void implRead (
FpLock& fp);
261 void implWrite(
const WayPoint* wptr);
262 void implRead (
const WayPoint*& wptr);
267 void implWrite(
const Npc* npc);
268 void implRead (
const Npc*& npc);
270 void implWrite(
Npc* npc);
271 void implRead (
Npc*& npc);
276 static size_t writeFunc(
void *pOpaque, uint64_t file_ofs,
const void *pBuf,
size_t n);
277 static size_t readFunc (
void *pOpaque, uint64_t file_ofs,
void *pBuf,
size_t n);
280 bool implSetEntry(std::string_view e);
281 uint32_t implDirectorySize(std::string_view e);
287 std::unordered_set<std::string> outFileList;
288 World* ctx =
nullptr;
290 mz_zip_archive impl = {};
291 std::string entryName;
292 std::vector<uint8_t> entryBuf;
293 uint64_t curOffset = 0;
294 uint64_t readOffset = 0;
295 Tempest::ODevice* fout =
nullptr;
296 Tempest::IDevice* fin =
nullptr;