diff --git a/src/CRE/object.cpp b/src/CRE/object.cpp index 687e4fc3..6d0f444f 100644 --- a/src/CRE/object.cpp +++ b/src/CRE/object.cpp @@ -1981,18 +1981,14 @@ bool object_storage_load_obj_set_check_not_read(uint32_t set_id, if (!set_info_file) return false; - object_database local_obj_db; if (obj_db_file.ready) { if (obj_db) obj_db->add(&obj_db_file); - local_obj_db.add(&obj_db_file); } - texture_database local_tex_db; if (tex_db_file.ready) { if (tex_db) tex_db->add(&tex_db_file); - local_tex_db.add(&tex_db_file); } info->name.assign(set_info_file->name); @@ -2006,7 +2002,7 @@ bool object_storage_load_obj_set_check_not_read(uint32_t set_id, if (!set->ready) return false; - object_material_msgpack_read("patch\\AFT\\objset", file.c_str(), set, &local_obj_db); + object_material_msgpack_read("patch\\AFT\\objset", file.c_str(), set, obj_db); info->obj_file_handler.reset(); info->obj_id_data.reserve(set->obj_num); @@ -2021,7 +2017,7 @@ bool object_storage_load_obj_set_check_not_read(uint32_t set_id, ObjsetInfo_calc_axis_aligned_bounding_box(info); info->obj_loaded = true; - if (ObjsetInfo_load_textures_modern(info, txd->data, txd->size, file.c_str(), &local_tex_db)) + if (ObjsetInfo_load_textures_modern(info, txd->data, txd->size, file.c_str(), tex_db)) return false; ObjsetInfo_get_shader_index_texture_index(info); diff --git a/src/KKdLib/obj.cpp b/src/KKdLib/obj.cpp index 124c4728..8b7f1100 100644 --- a/src/KKdLib/obj.cpp +++ b/src/KKdLib/obj.cpp @@ -73,7 +73,7 @@ struct obj_header { }; struct obj_set_header { - uint32_t last_obj_id; + int64_t last_obj_id; int64_t obj_data; int64_t obj_skin_data; int64_t obj_name_data; @@ -1387,7 +1387,7 @@ static void obj_set_classic_write_inner(obj_set* set, stream& s) { s.position_push(0x00, SEEK_SET); s.write_uint32_t(0x05062500); s.write_int32_t(set->obj_num); - s.write_uint32_t(osh.last_obj_id); + s.write_uint32_t((uint32_t)osh.last_obj_id); s.write_uint32_t((uint32_t)osh.obj_data); s.write_uint32_t((uint32_t)osh.obj_skin_data); s.write_uint32_t((uint32_t)osh.obj_name_data); @@ -3829,10 +3829,10 @@ static void obj_classic_write_vertex(obj_mesh* mesh, if (_vertex_format_file & OBJ_VERTEX_FILE_BONE_INDEX) { vertex[11] = s.get_position() - base_offset; for (uint32_t i = 0; i < _num_vertex; i++) { - s.write_float_t((float_t)vtx[i].bone_index.x); - s.write_float_t((float_t)vtx[i].bone_index.y); - s.write_float_t((float_t)vtx[i].bone_index.z); - s.write_float_t((float_t)vtx[i].bone_index.w); + s.write_float_t(vtx[i].bone_index.x >= 0 ? (float_t)(vtx[i].bone_index.x * 3) : -1.0f); + s.write_float_t(vtx[i].bone_index.y >= 0 ? (float_t)(vtx[i].bone_index.y * 3) : -1.0f); + s.write_float_t(vtx[i].bone_index.z >= 0 ? (float_t)(vtx[i].bone_index.z * 3) : -1.0f); + s.write_float_t(vtx[i].bone_index.w >= 0 ? (float_t)(vtx[i].bone_index.w * 3) : -1.0f); } } @@ -7827,10 +7827,10 @@ static void obj_modern_write_vertex(obj_mesh* mesh, stream& s, int64_t* vertex, s.write_int16_t_reverse_endianness((int16_t)bone_weight.z); s.write_int16_t_reverse_endianness((int16_t)bone_weight.w); - s.write_uint8_t((uint8_t)vtx[i].bone_index.x); - s.write_uint8_t((uint8_t)vtx[i].bone_index.y); - s.write_uint8_t((uint8_t)vtx[i].bone_index.z); - s.write_uint8_t((uint8_t)vtx[i].bone_index.w); + s.write_uint8_t((uint8_t)(vtx[i].bone_index.x >= 0 ? vtx[i].bone_index.x * 3 : -1)); + s.write_uint8_t((uint8_t)(vtx[i].bone_index.y >= 0 ? vtx[i].bone_index.y * 3 : -1)); + s.write_uint8_t((uint8_t)(vtx[i].bone_index.z >= 0 ? vtx[i].bone_index.z * 3 : -1)); + s.write_uint8_t((uint8_t)(vtx[i].bone_index.w >= 0 ? vtx[i].bone_index.w * 3 : -1)); } }