diff --git a/src/KKdLib/f2/header.cpp b/src/KKdLib/f2/header.cpp index b6f36620..a25dc00a 100644 --- a/src/KKdLib/f2/header.cpp +++ b/src/KKdLib/f2/header.cpp @@ -174,7 +174,7 @@ bool f2_header::validate_crc(int32_t not_ignore_crc) { } void f2_header::write(stream& s) { - if (s.check_null()) + if (s.check_null() && !reinterpret_cast(&s)) return; s.write(this, get_length()); diff --git a/src/KKdLib/f2/struct.cpp b/src/KKdLib/f2/struct.cpp index ad7583b8..434c545c 100644 --- a/src/KKdLib/f2/struct.cpp +++ b/src/KKdLib/f2/struct.cpp @@ -120,7 +120,7 @@ void f2_struct::write(void** data, size_t* size, bool use_depth, bool shift_x) { } void f2_struct::write(stream& s, bool use_depth, bool shift_x) { - if (s.check_null()) + if (s.check_null() && !reinterpret_cast(&s)) return; f2_struct_get_length(this, shift_x); diff --git a/src/KKdLib/obj.cpp b/src/KKdLib/obj.cpp index 4ce72921..9cf9b1bc 100644 --- a/src/KKdLib/obj.cpp +++ b/src/KKdLib/obj.cpp @@ -4270,9 +4270,8 @@ static void obj_set_modern_write_inner(obj_set* set, stream& s) { s_omdl.big_endian = big_endian; if (obj->skin) { - st.sub_structs.push_back({}); - omdl = &st.sub_structs.end()[-2]; - f2_struct* oskn = &st.sub_structs.back(); + omdl->sub_structs.push_back({}); + f2_struct* oskn = &omdl->sub_structs.back(); memory_stream s_oskn; s_oskn.open(); @@ -4285,7 +4284,7 @@ static void obj_set_modern_write_inner(obj_set* set, stream& s) { s_oskn.close(); new (&oskn->header) f2_header('OSKN'); - oskn->header.attrib.set_big_endian(big_endian); + omdl->header.attrib.set_big_endian(big_endian); } obj_modern_write_model(obj, s_omdl, 0, is_x, omdl);