Members mrmaller1905 Posted August 2 Members Posted August 2 Does anyone have a Blender plugin to import Tom Clancy's Rainbow Six: Rogue Spear (PC) .crp / .map / .qob / .rob / .skl / .sob? Here are the file format specifications and 010 Editor binary templates made by @alexkimov https://github.com/AlexKimov/RSE-file-formats/tree/master/010Editor-templates Samples: https://mega.nz/folder/NCZ3GJSb#_-HLrQfsFTfzIcdAoOSrnw
Members marty Posted August 2 Members Posted August 2 12 hours ago, mrmaller1905 said: Does anyone have a Blender plugin to import Tom Clancy's Rainbow Six: Rogue Spear (PC) .crp / .map / .qob / .rob / .skl / .sob? Here are the file format specifications and 010 Editor binary templates made by @alexkimov https://github.com/AlexKimov/RSE-file-formats/tree/master/010Editor-templates Samples: https://mega.nz/folder/NCZ3GJSb#_-HLrQfsFTfzIcdAoOSrnw You have the format specifications, 010 Editor binary templates and you are still asking for other people to make the plugin for you? You have everything you need right there so get to work on the blender plugin if you really want it 1
Engineers shak-otay Posted August 3 Engineers Posted August 3 8 hours ago, marty said: You have the format specifications, 010 Editor binary templates and you are still asking for other people to make the plugin for you? You have everything you need right there so get to work on the blender plugin if you really want it Hey, that sounds as if you knew how to convert a bt template into a python script. Could you share your knowledge?
Members marty Posted August 3 Members Posted August 3 4 hours ago, shak-otay said: Hey, that sounds as if you knew how to convert a bt template into a python script. Could you share your knowledge? no I'm just saying the person has everything they need to make the plugin themselves from scratch and are still asking people to do it for them.
Engineers shak-otay Posted August 3 Engineers Posted August 3 (edited) 48 minutes ago, marty said: no I'm just saying the person has everything they need to make the plugin themselves from scratch How do you know he could do it? Having infos doesn't imply to be able to use them to create scripts. (Most requesters in this forum can't, that's why they're asking for help.) (Btw, he's presenting methods sometimes (example) but usually they're found by others, afair.) So the real question is: why, @mrmaller1905, don't you use the bt templates to share some infos about .crp / .map / .qob / .rob / .skl / .sob? Edited August 3 by shak-otay
Members mrmaller1905 Posted August 3 Author Members Posted August 3 (edited) 51 minutes ago, shak-otay said: How do you know he could do it? Having infos doesn't imply to be able to use them to create scripts. (Most requesters in this forum can't, that's why they're asking for help.) (Btw, he's presenting methods sometimes (example) but usually they're found by others, afair.) So the real question is: why, @mrmaller1905, don't you use the bt templates to share some infos about .crp / .map / .qob / .rob / .skl / .sob? I used the binary templates for 010 Editor for all file formats and they work successfully. CRP(rsp).bt: //------------------------------------------------ //--- 010 Editor v7.0 Binary Template // // File: CRP(rsp).bt // Authors: Alexander Evdokimov // Version: 0.1 // Purpose: Rainbow six Rogue Spear CRP files // File Mask: *.crp // // History: // // 2018.05 v0.1 initial release //------------------------------------------------ const uint numberOfBones = 18; typedef struct { UINT Length; char Text[Length]; } CSTRING; typedef struct { UINT Red; UINT Green; UINT Blue; UINT Alpha; } VECTOR_4UI; typedef struct { UINT X; UINT Y; UINT Z; } VECTOR_3UI; typedef struct { UINT16 X; UINT16 Y; UINT16 Z; } VECTOR_3UI16; typedef struct { FLOAT X; FLOAT Y; FLOAT Z; } VECTOR_3F; typedef struct { FLOAT X; FLOAT Y; FLOAT Z; FLOAT W; } VECTOR_4F; typedef struct { FLOAT X; FLOAT Y; } VECTOR_2F; struct { FLOAT Version <name="Version">; // 1.8 } HEADER <name="Header">; //------------------------------------------------- struct { typedef struct { UINT VertexCount <name="Vertex count">; struct { UINT Index[VertexCount]; } INDEX_ARRAY <name="Vertex index array">; struct { VECTOR_3F CoordinatesArray[VertexCount] <name="Vertex">; } COORDINATES <name="Vertex coordinates array">; } BODYP <optimize=false, name="Body part related to bone">; BODYP BodyParts[numberOfBones]; // 18 bones total } BODY <name="Weight indexes">; //------------------------------------------------- struct { UINT Length; char Name[Length] <name="Model name">; UINT Unknown; BYTE Unknown; BYTE Unknown; BYTE Unknown; // FLOAT X; FLOAT Y; FLOAT Z; FLOAT Unknown; // FLOAT X; FLOAT Y; FLOAT Z; FLOAT Unknown; UINT A; if (A > 0) { UINT Unknown; }; // BYTE Unknown; BYTE Unknown; UINT Unknown; // !?? UINT Unknown; // } U <name="Unknown">; typedef struct { FLOAT Unknown; // 0 FLOAT X; FLOAT Y; FLOAT Z; FLOAT Unknown; // 0 UINT Unknown; // 0 UINT Unknown; // 0 UINT Unknown; // 0 } VERTEX_S <name="Vertex">; struct { UINT Count; typedef struct (int arraySize) { VERTEX_S array[arraySize] <optimize=false>; } VERTEXES2; VERTEXES2 Vertexes(Count) <name="Vertexes">; } VERTEXES <name="Vertexes (Static Pose)">; //------------------------------------------------- UINT MeshCount; typedef struct { struct { UINT Length; char Name[Length]; UINT Unknown; BYTE Unknown; BYTE Unknown; BYTE Unknown; // FLOAT X; FLOAT Y; FLOAT Z; FLOAT Unknown; // FLOAT X; FLOAT Y; FLOAT Z; FLOAT Unknown; UINT TransparencyFlag <name="Effects transparency(BlenMode)??">; // 3, 5 // if (TransparencyFlag > 0) { if (TransparencyFlag == 5) // transparent UINT Data[8]; UINT Unknown; // 12 } UINT Length; CHAR TextureFileName[Length]; UINT Unknown; // 3, 4 UINT Unknown; // 0 UINT Unknown; // 1 UINT Unknown; // 13 UINT Unknown; // 6 UINT Unknown; // 0 FLOAT Unknown1[4]; UINT Unknown; // 7 FLOAT Unknown2[16]; UINT Unknown; // 0 BYTE Unknown; // 1 BYTE Unknown; // 1 } UNKNOWN_DATA <name="Texture properties?">; // struct { UINT VertexCount; VECTOR_4F Color[VertexCount]; UINT count2; VECTOR_2F Unnkown[VertexCount*count2]; struct { UINT VertexCount; VECTOR_4F Color2[VertexCount]; UINT unknown; VECTOR_2F UVCoordinates[VertexCount]; VECTOR_3F Normals[VertexCount] <name="Normals?">; } VERTEX_ATTRIBUTES; struct { UINT FaceCount; struct { VECTOR_4F FaceNormal[FaceCount]; VECTOR_3UI16 VertIndexes[FaceCount] <name="Vertex indexes">; VECTOR_3UI16 TextureUVIndexes[FaceCount] <name="UV indexes">; } FACES; } FACE_DATA; } GEOMETRY_DATA; } MESH <optimize=false, name="Mesh">; typedef struct (uint count) { MESH array[count]; } MESH_ARRAY <name="Meshes">; MESH_ARRAY Meshes(MeshCount) ; //------------------------------------------------- QOB(rsp).bt: //------------------------------------------------ //--- 010 Editor v7.0 Binary Template // // File: QOB(rsp).bt // Authors: Alexander Evdokimov // Version: 0.2 // Purpose: Rogue Spear QOB file // File Mask: *.qob // // History: // // 2016.10 v0.2 initial release //------------------------------------------------ typedef enum <ubyte> { no, yes } BOOL; // bool data type typedef struct { UINT Length; char Text[Length]; } CSTRING; typedef struct { UINT SectionSize; UINT ID; CSTRING Name; if (Name.Text == "Version") { UINT Value; CSTRING Name <name="Name">; }; } HEADER <name="Header">; typedef struct { FLOAT Red; FLOAT Green; FLOAT Blue; FLOAT Alpha; } COLOR4F; typedef struct { FLOAT x; FLOAT y; FLOAT z; } VECTOR3F; typedef struct { FLOAT x; FLOAT y; } VECTOR2F; typedef struct { UINT16 x; UINT16 y; UINT16 z; } VECTOR3U16; //-------------------- // File header // -------------------- struct { CSTRING Name; } QOB_FILE_HEADER <name="QOB Header", fgcolor=cBlack, bgcolor=0xccff66>; //-------------------- // MATERIALLIST // -------------------- typedef struct { HEADER header; CSTRING Name <name="Texture filename">; struct { FLOAT Opacity; FLOAT Unknown; UINT Unknown; COLOR4F Ambient; COLOR4F Diffuse; COLOR4F Specular; FLOAT SpecularLevel; //o.o5 BYTE twoSided; } MATERIAL_PROPERTIES; } MATERIAL <name=MaterialName>; string MaterialName(MATERIAL &material) { return "Name: " + material.header.Name.Text + " "; } struct { HEADER Header <name="Section header">; struct { UINT Count <name="Number of materials">; typedef struct (int arraySize) { MATERIAL array[arraySize] <optimize=false>; } MATERIAL_ARRAY; MATERIAL_ARRAY MaterialArray(Count) <name="Materials">; } Materials <name="1.1 Materials section">; } MATERIALLIST <name="MaterialList section">; //-------------------- // QOBGEOMETRYLIST // -------------------- typedef struct { UINT MaterialIndex; struct { UINT FaceCount; typedef struct { FLOAT X; FLOAT Y; FLOAT Z; FLOAT Distance; } FACE_NORMALS; typedef struct (int arraySize) { FACE_NORMALS array[arraySize]; } FACE_NORMALS_ARRAY; FACE_NORMALS_ARRAY FacesNormalsArray(FaceCount) <name="Normals">; typedef struct (int arraySize) { VECTOR3U16 array[arraySize] <name="Vertex indexes">; } FACE_INDEXES; FACE_INDEXES FaceIndexes(FaceCount) <name="Face Indexes">; typedef struct (int arraySize) { VECTOR3U16 array[arraySize]; } UV_INDEXES; UV_INDEXES TextureCoordanatesIndexes(FaceCount) <name="Texture Indices">; } Faces <name="Faces">; struct { UINT VertexCount; typedef struct (int arraySize) { VECTOR3F array[arraySize] <name="Normal">; } NORMALS; NORMALS Normals(VertexCount) <name="Vertex Normals">; typedef struct (int arraySize) { VECTOR2F array[arraySize] <name="UV">; } UV_COORDINATES; UV_COORDINATES TextureCoordinates(VertexCount) <name="Texture coordinates">; typedef struct (int arraySize) { COLOR4F array[arraySize] <optimize=false, name="RGB color">; } FACE_COLOR; FACE_COLOR FaceColor(VertexCount) <name="Faces colors">; } TEXTUREVERTICIES <name="Texture data">; } MESH <name="Mesh">; struct { HEADER Header <name="GeometryList Header">; UINT Count <name="Object Count">; typedef struct { // section header HEADER Header <name="Section header">; UINT VertexCount; typedef struct (int arraySize) { VECTOR3F array[arraySize] <name="Vertex">; } VERTEXES; VERTEXES VertexArray(VertexCount) <name="Vertexes">; UINT MeshCount; // typedef struct (int arraySize) { MESH array[arraySize] <optimize=false>; } MESHES; MESHES Meshes(MeshCount) <name="Mesh array">; } OBJECT <name="Object">; typedef struct (int arraySize) { OBJECT array[arraySize] <optimize=false>; } OBJECTS; OBJECTS GeometryDataArray(Count) <name="Objects">; } QOBGEOMETRYLIST <name="GeometryList Section">; struct { UINT Length; char String[Length]; } ENDMODEL_STRING <name="QOB File End">; ROB.bt: //------------------------------------------------ //--- 010 Editor v7.0 Binary Template // // File: ROB.bt // Authors: Alexander Evdokimov // Version: 1.0 // Purpose: Rainbow Six Rogue Spear ROB file // File Mask: *.rob // // History: // 2019 v1.0 // 2017 v0.5 initial release //------------------------------------------------ string readCString() { local uint Length; local string Name; Length = ReadInt(FTell()); FSkip(4); Name = ReadString(FTell()); FSkip(-4); return Name; }; typedef struct { FLOAT Red; FLOAT Green; FLOAT Blue; FLOAT Alpha; } COLOR4F; typedef enum <ubyte> { no = 0, yes = 1 } BOOL; // bool data type typedef struct { UINT Length; char Text[Length]; } CSTRING; typedef struct { UINT SectionSize; UINT ID; CSTRING Name <name="Version">; if (Name.Text == "Version") { UINT Value; CSTRING Name <name="Name">; }; } SECTION_HEADER <name="Header">; typedef enum <uint> { Opaque = 0, unknown = 1, LookupCXP = 3 } ALPHA_METHOD; typedef struct { UINT16 x; UINT16 y; UINT16 z; } VECTOR_SHORT; typedef struct { FLOAT x; FLOAT y; FLOAT z; } VECTOR3F; typedef struct { FLOAT x; FLOAT y; FLOAT z; FLOAT w; } VECTOR4; typedef struct { FLOAT x; FLOAT y; } POINT2; // BeginModel token CSTRING BeginModel <name="BeginModel token">; //-------------------- // MaterialList // -------------------- typedef struct { SECTION_HEADER Header; CSTRING Name <name="Texture filename">; struct { FLOAT Opacity; FLOAT Emissive; // 0 ALPHA_METHOD alpha; // 0 - Opaque, 1 - unknown, 3 - Lookup CXP or opaque COLOR4F Ambient; COLOR4F Diffuse; COLOR4F Specular; FLOAT SpecularLevel; //o.o5 BOOL twoSided; } MATERIAL_PROPERTIES; } MATERIAL <name=MaterialName>; string MaterialName(MATERIAL &material) { return "Name: " + material.Header.Name.Text; } struct { SECTION_HEADER Header; UINT Count <name="Number of materials">; typedef struct (int arraySize) { MATERIAL array[arraySize] <optimize=false>; } MATERIALS; MATERIALS Materials(Count) <name="Materials">; } MATERIAL_LIST <name="Material list">; //-------------------- // GeometryList // -------------------- typedef struct { struct { UINT Index <name="Index of the material">; UINT Count <name="Number of faces">; typedef struct (int arraySize) { VECTOR4 array[arraySize]; } NORMALS1; NORMALS1 Normals(Count) <name="Normals??">; typedef struct (int arraySize) { VECTOR_SHORT array[arraySize]; } FACE_INDEXES; FACE_INDEXES FaceIndexes(Count) <name="Face Indexes">; typedef struct (int arraySize) { VECTOR_SHORT array[arraySize]; } TEXTURE_INDEXES; TEXTURE_INDEXES TextureIndexes(Count) <name="Texture Indexes">; UINT VertexCount; typedef struct (int arraySize) { VECTOR3F array[arraySize]; } NORMALS2; NORMALS2 Normals(VertexCount) <name="Normals">; typedef struct (int arraySize) { POINT2 array[arraySize]; } UVs; UVs TextureCoordinates(VertexCount) <name="Texture coordinates">; typedef struct (int arraySize) { COLOR4F array[arraySize] <optimize=false,name="RGBA Color">; } VERTEX_COLOR4F; VERTEX_COLOR4F FaceCOLOR4F(VertexCount) <name="Vertex COLOR4Fs">; } GEOMETRY_DATA <name="Geometry data section">; } MESH <name="Mesh">; struct { SECTION_HEADER Header; UINT Count <name="Number of the objects">; typedef struct { SECTION_HEADER Header; SECTION_HEADER Header; UINT Count <name="Number of vertexes">; typedef struct (int arraySize) { VECTOR3F array[arraySize]; } VERTEXES; VERTEXES Vertexes(Count) <name="Vertexes">; UINT Count <name="Number of meshes">; typedef struct (int arraySize) { MESH array[arraySize] <optimize=false>; } MESHES; MESHES Meshes(Count) <name="Meshes">; struct { UINT Zero; UINT Zero; UINT Count; typedef struct { struct { UINT16 I1; UINT16 I2; UINT16 I3; UINT16 Index; } Face; UINT Unknown; // 0 UINT Unknown; } INDEXES; typedef struct (int arraySize) { INDEXES array[arraySize] <optimize=false>; } INDEXES_ARRAY; INDEXES_ARRAY CCArray(Count) <name="Indexes">; UINT count; struct { CSTRING Name; UINT Unknown; UINT Count; UINT16 Index[Count] <name="Index">; } UNKNOWN[count] <optimize=false>; } UNKNOWN_DATA; } OBJECT; typedef struct (int arraySize) { OBJECT array[arraySize] <optimize=false>; } OBJECTS; OBJECTS Objects(Count) <name="Objects">; } ROBGEOMETRYLIST <name="GeometryList">; CSTRING EndModel <name="EndModel token">; MAP(rsp).bt: //------------------------------------------------ //--- 010 Editor v7.0 Binary Template ------------ // // File: MAP.bt // Authors: Alexander Evdokimov // Version: 0.8 // Purpose: Rogue Spear MAP file // File Mask: *.map // // History: // //------------------------------------------------ struct { local byte check_enable = 0; // 1 - enable value checking | 0 - disable } VARS <hidden=true>; void Check(int value, int number, string str) { if (VARS.check_enable) { local string s1, s2; SPrintf( s1, "%d", (int)value ); SPrintf( s2, "%d", (int)number ); if (value != number) { MessageBox( idYes, "Warning", str + ": " + s1 + " not " + s2); break; }; }; }; typedef struct { UINT Length; char Text[Length]; } CSTRING; typedef struct { UINT SectionSize; UINT ID; CSTRING Name; if (Name.Text == "Version") { UINT value; CSTRING Name; }; } SECTION_HEADER <name="Header">; typedef struct { UINT ID; CSTRING Name; if (Name.Text == "Version") { UINT value; CSTRING Name; }; } SECTION_HEADER_SHORT <name="Header">; typedef struct { struct { FLOAT x; FLOAT y; FLOAT z; } XAxis; struct { FLOAT x; FLOAT y; FLOAT z; } YAxis; struct { FLOAT x; FLOAT y; FLOAT z; } ZAxis; struct { FLOAT Y; FLOAT X; FLOAT Z; } Position; } TRANSFORMATION_MATRIX; typedef enum <ubyte> { no, yes } BOOL; // bool data type typedef struct { FLOAT Red; FLOAT Green; FLOAT Blue; FLOAT Alpha; } COLOR_4F; typedef enum <uint> { Opaque = 0, Wrap = 1, Clamp = 3 } TEXTURE_ADDRESS_MODE <name="Texture address mode">; //------------------------------------------------ // Flie header //------------------------------------------------ struct { CSTRING Name <name="File ID (Signature)">; time_t CreateDate <name="File Creation Date">; } MAP_HEADER <name="MAP Header", fgcolor=cBlack, bgcolor=0xccff66>; //------------------------------------------------ // Section - MaterialList //------------------------------------------------ typedef struct { SECTION_HEADER Header <name="Material Section Header">; CSTRING Name <name="Texture filename">; struct { FLOAT Opacity; // 0..1 UINT EmissiveStrength; TEXTURE_ADDRESS_MODE AddressMode; COLOR_4F Ambient; COLOR_4F Diffuse; COLOR_4F Specular; FLOAT SpecularLevel; BOOL twoSided <name="2-Sided">; } PARAMETERS; } MATERIAL <name=MaterialName>; string MaterialName(MATERIAL &material) { return "Name: " + material.Header.Name.Text + " "; } struct { SECTION_HEADER Header <name="1.0 MaterialList section header">; struct { UINT Count <name="Number of Materials">; typedef struct (int arraySize) { MATERIAL array[arraySize] <optimize=false>; } MATERIAL_ARRAY; MATERIAL_ARRAY MaterialArray(Count) <name="Materials">; } MATERIALS <name="1.1 Materials section">; } MAPMATERIALLIST <name="1. MaterialList section">; //------------------------------------------------ // Section - GeometryList //------------------------------------------------ typedef enum <uint> { Carpet, Concrete, Wood, Metal, Asphalt, Sand, LowGrass, HighGrass, Puddle, Water, Drywall, ThinMetal, ThickMetal, MetalGasTank, SteamPipe, ElectricalPanel, Snow, SafetyGlass, BulletResistantGlass, Ice, Mud, Glass, Foliage, Gravel, GlassShards, CreakyWood, DeepSand, BakedClay, unset = 4294967295 } SURFACE_PROPERTY; typedef struct { CSTRING Name[Length]; // BYTE FloorPolygon; // 2 - non colidable 2d, 10 - non colidable 3d, 26 - 3 BYTE CarvingBoundary; // 1 - Carving Boundary 2 - cannot carve BYTE MN; // 0 Check(MN, 0, "POLYGON_PARAMETERS 1"); BYTE MN; // 0 Check(MN, 0, "POLYGON_PARAMETERS 2"); SURFACE_PROPERTY SurfaceProperty <name="Surface Property">; // 0 - 12 } POLYGON_PROPERTIES <name=PPName>; string PPName(POLYGON_PROPERTIES &polygonproperties) { return "Name: " + polygonproperties.Name; } typedef struct { SECTION_HEADER Header <name="Section header">; SECTION_HEADER Header2 <name="Object section header">; struct { UINT VertexCount; typedef struct { FLOAT X; FLOAT Y; FLOAT Z; } VERTEX <name="VERTEX">; typedef struct (int arraySize) { VERTEX array[arraySize] <optimize=false>; } VERTEX_ARRAY; VERTEX_ARRAY VertexArray(VertexCount) <name="Object vertices array">; } VERTICES <name="Object vertices section">; struct { UINT Count; typedef struct { UINT MN; struct { UINT FaceCount; typedef struct { FLOAT X; FLOAT Y; FLOAT Z; FLOAT DistanceOriginFace; // Distance from object origin to face, sign defines direction of normal vector } FACE_NORMAL <name="Normal">; typedef struct (int arraySize) { FACE_NORMAL array[arraySize] <optimize=false>; } FACE_NORMAL_ARRAY; FACE_NORMAL_ARRAY FaceNormalArray(FaceCount) <name="Normals">; typedef struct { UINT16 P1; UINT16 P2; UINT16 P3; } FACE_INDICIES; typedef struct (int arraySize) { FACE_INDICIES array[arraySize] <optimize=false>; } FACE_INDICIES_ARRAY; FACE_INDICIES_ARRAY FaceIndiciesArray(FaceCount) <name="Faces index array">; typedef struct { UINT16 P1; UINT16 P2; UINT16 P3; } TEXTURE_INDICIES <name="Texture indicies">; typedef struct (int arraySize) { TEXTURE_INDICIES array[arraySize] <optimize=false>; } TEXTURE_INDICIES_ARRAY; TEXTURE_INDICIES_ARRAY TextureIndiciesArray(FaceCount) <name="Texture index array">; } FACES <name="Faces">; struct { UINT VerticiesCount; // ? typedef struct { FLOAT X; FLOAT Y; FLOAT Z; } NORMAL_COORDINATES <name="Normal">; typedef struct (int arraySize) { NORMAL_COORDINATES array[arraySize] <optimize=false>; } NORMAL_COORDINATES_ARRAY; NORMAL_COORDINATES_ARRAY NormalCoordinatesArray(VerticiesCount) <name="Normal Coordinates">; // if (TextureCount > 0) { typedef struct { FLOAT U; FLOAT V; } TEXTURE_UVCOORDINATES <name="UV coordinates">; typedef struct (int arraySize) { TEXTURE_UVCOORDINATES array[arraySize] <optimize=false>; } TEXTURE_UVCOORDINATES_ARRAY; TEXTURE_UVCOORDINATES_ARRAY TextureCoordinatesArray(VerticiesCount) <name="Texture Coordinates">; // }; typedef struct (int arraySize) { COLOR_4F array[arraySize] <optimize=false>; } FACE_COLOR_ARRAY; FACE_COLOR_ARRAY CoordinatesArray(VerticiesCount) <name="Faces colors">; } TEXTURE_VERTICIES <name="Texture data">; } OBJECT_DATA; typedef struct (int arraySize) { OBJECT_DATA array[arraySize] <optimize=false>; } OBJECT_DATA_ARRAY; OBJECT_DATA_ARRAY MAPObjectsDataArray(Count) <name="Objects data array">; } OBJECTS_DATA <name="Objects data section">; struct { UINT VerticiesCount; if (VerticiesCount > 0) { typedef struct { FLOAT X; FLOAT Y; FLOAT Z; } COVERTICE <name="Vertex">; typedef struct (int arraySize) { COVERTICE array[arraySize]; } COVERTICE_ARRAY; COVERTICE_ARRAY COArray(VerticiesCount) <name="Vertex Array">; }; UINT FaceCount; if (FaceCount > 0) { typedef struct { FLOAT X; FLOAT Y; FLOAT Z; FLOAT DistanceOriginFace; } COLLISION_FACE_NORMALS <name="Face Normals">; typedef struct (int arraySize) { COLLISION_FACE_NORMALS array[arraySize]; } COLLISION_FACE_NORMALS_ARRAY; COLLISION_FACE_NORMALS_ARRAY MAPCollisionFaceNormalsArray(FaceCount) <name="Face Normals Array">; }; } CollisionObjects <name="2D-Collision (non-rendered) objects section">; // Objects tagging properties struct { UINT FCount; typedef struct { UINT16 p1; UINT16 p2; UINT16 p3; UINT16 FIndex; UINT16 p1; UINT16 p2; UINT16 p3; UINT16 FIndex; } NRO_FACE_INDICIES <name="Face Indicies">; typedef struct (int arraySize) { NRO_FACE_INDICIES array[arraySize] <optimize=false>; } NRO_FACE_INDICIES_ARRAY; NRO_FACE_INDICIES_ARRAY NROFaceIndiciesArray(FCount) <name="Face Indicies Array">; } OBJECTST <name="Section">; UINT FFCount; struct { UINT Length; char Text[Length]; UINT MN; UINT Count; struct { UINT16 p1; } E_INDICIES[Count] <name="Indixes">; } IND[FFCount] <optimize=false>; } OBJECT <name=ObjectName>; string ObjectName(OBJECT &obj) { return "Name: " + obj.Header.Name.Text + " "; } struct { // SECTION_HEADER Header <name="GeometryList Header">; UINT Count <name="Number of objects">; typedef struct (int arraySize) { OBJECT array[arraySize] <optimize=false>; } OBJECTS; OBJECTS Objects(Count) <name="Objects">; } MAPGEOMETRYLIST <name="2. GeometryList Section">; //------------------------------------------------------ // PortalList Section //------------------------------------------------------ struct { SECTION_HEADER Header <name="Header">; UINT Count; typedef struct { SECTION_HEADER Header <name="Header">; UINT VertexCount; typedef struct { FLOAT x; FLOAT y; FLOAT z; } COORDINATES <name="Vertex Coordinates">; COORDINATES CoordinatesArray[VertexCount]; UINT RoomNumber; UINT OpositeRoomNumber; } PORTAL <name=PortalName>; typedef struct (int arraySize) { PORTAL array[arraySize] <optimize=false>; } PORTAL_ARRAY; PORTAL_ARRAY ObjectNameArray(Count) <name="Portals">; } PORTALLIST <name="5. Portal List">; string PortalName(PORTAL &portal) { return "Name: " + portal.HEADER.Name.Text; }; //---------------------------------------------------------------- // LightList Section //--------------------------------------------------------------- typedef struct { // empty } LIGHT; struct { SECTION_HEADER Header <name="ObjectList Header">; UINT Count; if (Count > 0) { typedef struct(int arraySize) { LIGHT array[arraySize] <optimize=false>; } LIGHTS; LIGHTS Lights(Count); }; } LIGHT_LIST <name="5. LightList section">; //---------------------------------------------------------------- // ObjectList section //--------------------------------------------------------------- typedef struct { SECTION_HEADER Header <name="ObjectList Header">; CSTRING Name; TRANSFORMATION_MATRIX TM; switch (Header.ID) { // Dynamic Object (i.e. Furniture, Television, something that can change) case 14: { TRANSFORMATION_MATRIX TM; CSTRING Name; UINT Unknown; // 0 CSTRING Sound1 <name="Sound 1">;; CSTRING Sound2 <name="Sound 2">; CSTRING Sound3 <name="Sound 3">; CSTRING Sound4 <name="Sound 4">; // ?? CSTRING CollisionType2d <name="2d Collision Type">; CSTRING CollisionType3d <name="3d Collision Type">; CSTRING DestructionAction; CSTRING DestructionCategory; CSTRING PenetrationType; CSTRING Name; CSTRING DestructionCategory; UINT Count; if (Count > 0) { struct { CSTRING Name; FLOAT Unknown1[9]; UINT Unknown2[2]; } PARAMS[Count] <optimize=false>; } else { UINT Count; CSTRING Name[Count] <optimize=false>; FLOAT Unknown3[4]; }; };break; // object with animation case 15: { TRANSFORMATION_MATRIX TM; CSTRING Name; UINT Unknown; // 0, 2 CSTRING Sound1 <name="Sound 1">; CSTRING Sound2 <name="Sound 2">; CSTRING Sound3 <name="Sound 3">; CSTRING Sound4 <name="Sound 4">; // ?? CSTRING CollisionType2d <name="2d Collision Type">; CSTRING CollisionType3d <name="3d Collision Type">; CSTRING DestructionAction; CSTRING DestructionCategory; CSTRING PenetrationType; CSTRING Name; CSTRING DestructionCategory; UINT Unknown; UINT Count; CSTRING Name[Count] <optimize=false>; FLOAT Unknown1[3]; UINT Unknown; CSTRING Name; CSTRING Name; CSTRING Animation_Type <name="Animation Type">; struct { FLOAT X; FLOAT Y; FLOAT Z; } DIRECTION <name="Direction">; FLOAT Distance; FLOAT Velocity; }; break; // door / Automatic Door.(uses touchplate to activate - Adtplate) case 16: { TRANSFORMATION_MATRIX TM; CSTRING Name; UINT Unknown; // 0, 2 CSTRING Sound1 <name="Sound 1">; CSTRING Sound2 <name="Sound 2">; CSTRING Sound3 <name="Sound 3">; CSTRING Sound4 <name="Sound 4">; // ?? CSTRING CollisionType2d <name="2d Collision Type">; CSTRING CollisionType3d <name="3d Collision Type">; CSTRING DestructionAction; CSTRING DestructionCategory; CSTRING PenetrationType; CSTRING Name; CSTRING DestructionCategory; UINT Unknown; UINT AttachementCount; CSTRING AttachementName[AttachementCount] <optimize=false>; FLOAT Unknown2[3]; UINT Count; CSTRING Name1[Count]; // more sounds? CSTRING Name; CSTRING Name; CSTRING Animation_Type <name="Animation Type">; struct { FLOAT X; FLOAT Y; FLOAT Z; } DIRECTION <name="Direction">; FLOAT Distance; FLOAT Velocity; }; break; // Glass case 20: { CSTRING Name; }; break; // Tplate One-time touch plate. (when touched it activates something, can be done in mission editor if NOT for a door) // Automatic door touch plate. (activates whenever touched, is attached to a specific door(s)) case 25: { CSTRING CollisionType2d <name="2d Collision Type">; CSTRING CollisionType3d <name="3d Collision Type">; struct { FLOAT X1; FLOAT Y1; FLOAT Z1; FLOAT X2; FLOAT Y2; FLOAT Z2; } TPLATE_COORDINATES; UINT AttachementCount; CSTRING AttachementName[AttachementCount] <optimize=false>; }; break; // halo case 31: { UINT Count; typedef struct { CSTRING Name; FLOAT X; FLOAT Y; FLOAT Z; FLOAT X; FLOAT Y; FLOAT Z; FLOAT X; FLOAT Y; } HALO; typedef struct (int arraySize) { HALO array[arraySize] <optimize=false>; } HALOS; HALOS Halo(Count); }; break; // Static world special effects // "steama" Medium hole in a steam pipe. //"smokestacka" Medium smoke stack. case 36: { }; break; }; } DYN_OBJECT <name=GetDynObjName>; string GetDynObjName(DYN_OBJECT &obj) { return "Name: " + obj.Header.Name.Text; }; struct { SECTION_HEADER Header <name="Header">; UINT ObjectCount; if (ObjectCount > 0) DYN_OBJECT Object[ObjectCount] <optimize=false>; } OBJECTLIST <name="7. ObjectList section">; //---------------------------------------------------------------- // RoomList section //--------------------------------------------------------------- typedef struct { SECTION_HEADER_SHORT Header; BYTE Unknown1; BYTE Unknown; BYTE Unknown2; if (Unknown1 == 0) BYTE Unknown3; if (Unknown2 == 1) { FLOAT Unknown6[6]; }; if (exists(Unknown3) && Unknown3 == 1) FLOAT Unknown00[6]; UINT ShermanLevelCount; typedef struct { CSTRING Name; UINT Count; typedef struct { TRANSFORMATION_MATRIX TM; FLOAT AABB[6]; } somr; somr ss[Count]; UINT Count; FLOAT Unknown[Count]; // 1 BYTE Unknown; // hasShermanLevelPlanArea? } SHERMAN_LEVEL; struct { SHERMAN_LEVEL ShermanLevels[ShermanLevelCount] <optimize=false>; } SHERMAN_LEVELS <name="Sherman levels">; UINT LevelHeightsCount; // 1 FLOAT Unknown; typedef struct { FLOAT LevelHeight; FLOAT Unknown; } LevelHeight; LevelHeight Unknown9[LevelHeightsCount]; } ROOM <name=RoomName>; string RoomName(ROOM &room) { return room.Header.Name.Text; } struct { SECTION_HEADER header <name="RoomList section header">; UINT Count; struct { ROOM Rooms[Count] <optimize=false>; } ROOMS <name="Rooms">; } ROOMLIST <name="8. RoomList section">; ////---------------------------------------------------------------- //// TransitionList section ////--------------------------------------------------------------- typedef struct { CSTRING TransitionName; struct { struct { FLOAT X; FLOAT Y; FLOAT Z; } P1; struct { FLOAT X; FLOAT Y; FLOAT Z; } P2; } COORDS; } TRANSITION <name="Transition">; struct { SECTION_HEADER header <name="Header">; UINT Count; typedef struct(int arraySize) { TRANSITION array[arraySize] <optimize=false>; } TRANSITIONS; TRANSITIONS Transitions(Count) <name="Transitions">; } TransitionLineList <name="9. TransitionList section">; ////---------------------------------------------------------------- //// PlanningLevelList section ////--------------------------------------------------------------- typedef struct { FLOAT LevelNumber; FLOAT FloorHeight; UINT RoomCount; CSTRING RoomName[RoomCount] <optimize=false>; } LEVEL <name="Level">; struct { SECTION_HEADER header <name="Header">; UINT LevelCount; if (LevelCount > 0) { LEVEL Level[LevelCount] <optimize=false>; }; } PLANNINGLEVEL_LIST <name="10. PlanningLevelList section">; CSTRING Name <name="EndMAP">; SKL(RSP).bt: //------------------------------------------------ //--- 010 Editor v8.0.1 Binary Template // // File: // Authors: // Version: // Purpose: // Category: // File Mask: // ID Bytes: // History: //------------------------------------------------ typedef struct { struct { FLOAT x; FLOAT y; FLOAT z; } XAXIS; struct { FLOAT x; FLOAT y; FLOAT z; } YAXIS; struct { FLOAT x; FLOAT y; FLOAT z; } ZAXIS; struct { FLOAT Y; FLOAT X; FLOAT Z; } POSITION; } TRANSFORMATION_MATRIX; struct { FLOAT Version; // 1.5 UINT BoneCount; } FILE_HEADER; typedef struct { // relative struct { FLOAT X; FLOAT Y; FLOAT Z; } POSITION_REL; // struct { FLOAT X; FLOAT Y; FLOAT Z; FLOAT W; } ROTATION_REL; // TRANSFORMATION_MATRIX Matrix; // absolute struct { FLOAT X; FLOAT Y; FLOAT Z; } POSITION_ABS; // struct { FLOAT X; FLOAT Y; FLOAT Z; FLOAT W; } ROTATION_ABS; FLOAT X; FLOAT Y; FLOAT Z; FLOAT W; // UINT Length; CHAR Name[Length]; UINT BoneIndex; BYTE A; if (A == 1) { struct { // FLOAT X; FLOAT Y; FLOAT Z; // FLOAT Unknown; // FLOAT X; FLOAT Y; FLOAT Z; // FLOAT X; FLOAT Y; FLOAT Z; // FLOAT Unknown; } UNKNOWN; } } BONE <optimize=false, name=getBoneName>; string getBoneName(BONE &Bone) { return Bone.Name; } void ReadBone() { BYTE Cycle; if (Cycle == 1) ReadBone(); BYTE Cycle; if (Cycle == 1) ReadBone(); BONE Bone; }; ReadBone(); SOB.bt: //------------------------------------------------ //--- 010 Editor v7.0 Binary Template // // File: SOB.bt // Authors: Alexandr Evdokimov // Version: 1.0 // Purpose: Rainbow six .sob file format // File Mask: .sob // // History: // // 2019.01 v1.0 // 2018.04 v0.6 // 2016 v0.5 initial release //------------------------------------------------ string readCString() { local uint Length; local string Name; Length = ReadInt(FTell()); FSkip(4); Name = ReadString(FTell()); FSkip(-4); return Name; }; typedef struct { UINT Red; UINT Green; UINT Blue; } COLOR; typedef enum <ubyte> { no = 0, yes = 1 } BOOL; // bool data type typedef struct { UINT Length; char Text[Length]; } CSTRING; typedef struct { UINT SectionSize; UINT ID; if (readCString() == "Version") { struct { CSTRING Name <name="Version">; UINT Value; } VERSION; } CSTRING Name <name="Name">; } SECTION_HEADER <name="Header">; typedef enum <uint> { Opaque = 0, unknown = 1, LookupCXP = 3 } ALPHA_METHOD; typedef struct { UINT x; UINT y; UINT z; } VECTOR3_LONG; typedef struct { FLOAT x; FLOAT y; FLOAT z; } VECTOR3; typedef struct { FLOAT x; FLOAT y; FLOAT z; FLOAT w; } VECTOR4; typedef struct { FLOAT x; FLOAT y; } POINT2; // BeginModel token CSTRING BeginModel <name="BeginModel token">; //-------------------- // MaterialList // -------------------- typedef struct { SECTION_HEADER Header; CSTRING Name <name="Texture filename">; struct { FLOAT Opacity; FLOAT Emissive; // 0 ALPHA_METHOD alpha; // 0 - Opaque, 1 - unknown, 3 - Lookup CXP or opaque COLOR Ambient; COLOR Diffuse; COLOR Specular; FLOAT SpecularLevel; //o.o5 BOOL twoSided; } MATERIAL_PROPERTIES <name="Properties">; } MATERIAL <name=MaterialName>; string MaterialName(MATERIAL &material) { return "Name: " + material.Header.Name.Text; } struct { SECTION_HEADER Header; UINT Count <name="Number of materials">; typedef struct (int arraySize) { MATERIAL array[arraySize] <optimize=false>; } MATERIALS; MATERIALS Materials(Count) <name="Materials">; } MATERIAL_LIST <name="Material list">; //-------------------- // GeometryList // -------------------- typedef struct { struct { UINT Count; CSTRING Name; } HEADER; UINT Count; UINT VertexIndexes[Count]; UINT Count; UINT FaceIndexes[Count]; UINT GeometryFlags; // Each bit corresponds to another flag on this mesh, such as Collision, Climbable, Invisible etc. CSTRING Name <name="String">; UINT Unknown ; } MESH <name=objectName>; string objectName(MESH &Mesh) { return Mesh.HEADER.Name.Text; } typedef struct { SECTION_HEADER Header; if (exists(Header.VERSION)) { UINT Unknown; UINT Unknown; }; UINT Count <name="Number of vertexes">; typedef struct (int arraySize) { VECTOR3 array[arraySize]; } VERTEXES; VERTEXES Vertexes(Count ) <name="Vertexes">; struct { UINT Count; typedef struct { VECTOR3 Normal <name="Normal">; POINT2 UV <name="UV">; FLOAT Unknown; COLOR Color <name="Color">; } V_DATA; V_DATA VertexData[Count] <name="Vertex parameters">; } VERTEX_DATA <name="Vertex data">; struct { UINT Count; typedef struct { VECTOR3_LONG Indexes <name="Vertex indices">; VECTOR3_LONG Indexes <name="Vertex Param indices">; VECTOR3 Normal <name="Normal">; UINT Unknown; INT MaterialIndex; } FACE <name="Face">; FACE FaceData[Count] <name="Faces">; } FACE_DATA <name="Face data">; struct { UINT Count; typedef struct (int arraySize) { MESH array[arraySize] <optimize=false>; } MESH_ARRAY; MESH_ARRAY Meshes(Count); } MESHES <name="Meshes">; } OBJECT <name=ObjectName>; string ObjectName(OBJECT &object) { return "Name: " + object.Header.Name.Text; } struct { SECTION_HEADER Header; UINT Count <name="Object Count">; typedef struct (int arraySize) { OBJECT array[arraySize] <optimize=false>; } OBJECTS; OBJECTS Objects(Count) <name="Objects">; } GEOMETRYLIST <name="GeometryList Section">; // EndModel token CSTRING EndModel <name="EndModel token">; rainbowsixroguespear_fileformatbinarytemplates.rar Edited August 3 by mrmaller1905
Engineers shak-otay Posted August 3 Engineers Posted August 3 (edited) 8 hours ago, mrmaller1905 said: I used the binary templates for 010 Editor for all file formats and they work successfully. Great. I asked for examples (results about .crp / .map / .qob / .rob / .skl / .sob) not for listing the templates here, which doesn't make much sense. edit: I'm not using 010 editor because it's not free, so I'd need a result if you want help edit2: ok, as usual I have to do it by myself (I used the pfp project for 010 template parsing) SKL(RSP).bt with arctic1_H_a.skl: struct { FILE_HEADER = struct { Version = Float(1.5) BoneCount = UInt(18 [00000012]) } Cycle = Char[10] ('') Bone = BONE[3] Bone[0] = struct { POSITION_REL = struct { X = Float(-0.0) Y = Float(-50.66297149658203) Z = Float(0.6907009482383728) } ROTATION_REL = struct { X = Float(0.0) Y = Float(-0.0) Z = Float(0.0) W = Float(1.0) } Matrix = struct { XAXIS = struct { x = Float(1.0) y = Float(0.0) z = Float(0.0) } YAXIS = struct { x = Float(0.0) y = Float(1.0) z = Float(0.0) } ZAXIS = struct { x = Float(0.0) y = Float(0.0) z = Float(1.0) } POSITION = struct { Y = Float(0.0) X = Float(0.0) Z = Float(0.0) } } POSITION_ABS = struct { X = Float(8.442500114440918) Y = Float(-101.23135375976562) Z = Float(0.9284082055091858) } ROTATION_ABS = struct { X = Float(0.0) Y = Float(0.0) Z = Float(0.0) W = Float(1.0) } X = Float(0.0) Y = Float(0.0) Z = Float(0.0) W = Float(1.0) Length = UInt(10 [0000000a]) Name = Char[10] ('RightFoot\x00') BoneIndex = UInt(17 [00000011]) A = Char(1 [01]) UNKNOWN = struct { X_0 = Float(2.3925747871398926) Y_0 = Float(-3.950580596923828) Z_0 = Float(7.4732985496521) Unknown_0 = Float(17.940418243408203) X_1 = Float(2.3925747871398926) Y_1 = Float(-10.469833374023438) Z_1 = Float(7.473298072814941) X_2 = Float(2.3925747871398926) Y_2 = Float(2.5686721801757812) Z_2 = Float(7.473298072814941) Unknown_1 = Float(14.223006248474121) } } Bone[1] = struct { POSITION_REL = struct { X = Float(-0.0) Y = Float(-46.9108772277832) Z = Float(0.2377072423696518) } ROTATION_REL = struct { X = Float(0.0) Y = Float(-0.0) Z = Float(0.0) W = Float(1.0) } ... Edited August 3 by shak-otay
Members Anti6 Posted Saturday at 11:07 AM Members Posted Saturday at 11:07 AM (edited) On 8/3/2025 at 5:41 PM, shak-otay said: Great. I asked for examples (results about .crp / .map / .qob / .rob / .skl / .sob) not for listing the templates here, which doesn't make much sense. edit: I'm not using 010 editor because it's not free, so I'd need a result if you want help edit2: ok, as usual I have to do it by myself (I used the pfp project for 010 template parsing) SKL(RSP).bt with arctic1_H_a.skl: struct { FILE_HEADER = struct { Version = Float(1.5) BoneCount = UInt(18 [00000012]) } Cycle = Char[10] ('') Bone = BONE[3] Bone[0] = struct { POSITION_REL = struct { X = Float(-0.0) Y = Float(-50.66297149658203) Z = Float(0.6907009482383728) } ROTATION_REL = struct { X = Float(0.0) Y = Float(-0.0) Z = Float(0.0) W = Float(1.0) } Matrix = struct { XAXIS = struct { x = Float(1.0) y = Float(0.0) z = Float(0.0) } YAXIS = struct { x = Float(0.0) y = Float(1.0) z = Float(0.0) } ZAXIS = struct { x = Float(0.0) y = Float(0.0) z = Float(1.0) } POSITION = struct { Y = Float(0.0) X = Float(0.0) Z = Float(0.0) } } POSITION_ABS = struct { X = Float(8.442500114440918) Y = Float(-101.23135375976562) Z = Float(0.9284082055091858) } ROTATION_ABS = struct { X = Float(0.0) Y = Float(0.0) Z = Float(0.0) W = Float(1.0) } X = Float(0.0) Y = Float(0.0) Z = Float(0.0) W = Float(1.0) Length = UInt(10 [0000000a]) Name = Char[10] ('RightFoot\x00') BoneIndex = UInt(17 [00000011]) A = Char(1 [01]) UNKNOWN = struct { X_0 = Float(2.3925747871398926) Y_0 = Float(-3.950580596923828) Z_0 = Float(7.4732985496521) Unknown_0 = Float(17.940418243408203) X_1 = Float(2.3925747871398926) Y_1 = Float(-10.469833374023438) Z_1 = Float(7.473298072814941) X_2 = Float(2.3925747871398926) Y_2 = Float(2.5686721801757812) Z_2 = Float(7.473298072814941) Unknown_1 = Float(14.223006248474121) } } Bone[1] = struct { POSITION_REL = struct { X = Float(-0.0) Y = Float(-46.9108772277832) Z = Float(0.2377072423696518) } ROTATION_REL = struct { X = Float(0.0) Y = Float(-0.0) Z = Float(0.0) W = Float(1.0) } ... Might be interesting to take a look at this since I have some experience with previous ghost recon script, this might be similar. Busy with a xbox and ps2 script for pgg and xgg first though Edited Saturday at 11:08 AM by Anti6 Fixed mistake
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now