//------------------------------------------------ //--- 010 Editor v12.0.1 Binary Template // // File: vt2_level.bt // Authors: Lucas Schwiderski // Version: // Purpose: // Category: Vermintide 2 // File Mask: *.level // ID Bytes: B5 00 00 00 // History: //------------------------------------------------ // See typedef struct { float x; float y; float z; } Vector3; typedef struct { float x; float y; float z; float w; } Quaternion; typedef struct { uint32 unknown_1 ; uint32 unknown_2 ; // unknown before this // maps directly to the keys of the same name, as murmur64 hashes uint64 id_hash ; // has to be there uint64 name_hash ; // Will be `0x0` when no name was given uint64 type_hash ; // has to be there uint64 material_hash ; // will be `0x0` when not given // defaults to 0, 0, 0 Vector3 pos; // defaults to 0, 0, 0, 0 Quaternion rot; // Not sure why they felt the need to abbreviate "scale". Defaults to 1, 1, 1 Vector3 scl; // unknown after this } Unit; typedef struct { uint32 name ; // murmur64-half uint64 resource ; // murmur64 } Material; typedef struct { uint32 unit_id; uint32 num_materials; Material materials[num_materials]; } UnitMaterials; // File Parsing uint32 version ; // correct uint32 num_units; // correct uint32 num_background_units; // correct uint32 section_address_unit_data ; //Unit Data & Level Settings uint32 section_address_unknown1 ; uint32 section_address_prototypes ; uint32 section_address_prototypes_data_size ; //Or adress to prototypes collision uint32 section_address_unknown2 ; uint32 section_address_unknown3 ; uint32 section_address_unknown4 ; uint32 section_address_unknown5 ; uint32 section_address_unknown6 ; uint32 section_address_unknown7 ; uint32 section_address_unknown8 ; uint32 section_address_level_settings ; uint32 particles_count; uint32 section_address_particles ; uint32 section_address_unknown12 ; uint32 section_address_unknown13 ; uint32 section_address_unknown14 ; uint32 section_address_unknown15 ; uint32 section_address_unknown16 ; uint32 section_address_unknown17 ; uint32 section_address_unknown18 ; uint32 section_address_unknown19 ; uint32 section_address_unknown20 ; uint32 section_address_unknown21 ; uint32 section_address_unknown22 ; uint32 section_address_stories ; uint32 section_address_unknown24 ; uint32 section_address_unknown25 ; uint32 section_address_unknown26 ; uint32 section_address_unknown27 ; uint32 section_address_unknown28 ; uint32 section_address_unknown29 ; uint32 section_address_unit_materials ; uint32 section_address_unknown31 ; uint32 section_address_unknown32 ; uint32 section_address_unknown33 ; uint32 num_settings_entries; // section start: unit, position unknown: Unit units[num_units]; FSeek(section_address_unit_materials); uint32 num_unit_materials; UnitMaterials unit_materials[num_unit_materials]; // section end uint32 len_sound_environment; // position unknown byte sound_environment[len_sound_environment]; if (len_sound_environment < 4) { byte padding_1[4 - (len_sound_environment % 4)]; // guess } byte unknown_3[3 * 4]; uint32 len_timpani_sound_environment; // position unknown byte timpani_sound_environment[len_timpani_sound_environment]; if (len_timpani_sound_environment < 4) { byte padding_2[4 - (len_timpani_sound_environment % 4)]; // guess }