Monday at 03:24 PM2 days awhile back i asked for help on the texture format for the rid game@DKDave quickly figured it out so credits to him and did figure out the format for the model which was part of the examples ziphe posted how and i made it into a template for modelresearcherhoweverthe template only worked on ironhide as other models had issues when i looked into how the template worked for ironhide i found out somethingthe model format has no header and is unique in a way that a template wouldnt workand since i dont how to write a noesis script i am going to show you how to import the model in modelresearcherthe first 4 bytes are important very importantfor the verticesget the first 4 bytes which is in case for our example beeside is 41 0c 00 00 so set the offset by 0x4and make sure the end block ends before the 2nd instance of the magic 4 bytesand when you hit render you get the verticesfor the facesin faces set type to shortstart the offset at 00 00 02 00 it is usually the starting face offset and before it is 4 bytes which end with a single 00and end the end block before the final 4 bytes which are usually 00 00 00 00for the uvs get the byte that is after the 3rd instance of the magic 4 bytes and use the same count as the vertices which the end block ends at the start of the 00 00 00 00 that is before the 4th instance of the magic 4 bytesoptional but for normals from @DKDave 's researchsame count as the vertices and uvs the offset is of course the byte after the 2nd instance of the magic 4 bytesremember the uvs are upside down when exporteda way that i fixed it is insert a plane into the model and using the constrain image pixels fit S and Y and -1 and delete the planewithout custom normalswith custom normals Edited Monday at 03:44 PM2 days by wedjklwkerfjgfkewgfh43ertg
Yesterday at 12:20 PM1 day Localization Can you tell us how did you extract the .dat files from the .bin files?
Yesterday at 12:26 PM1 day Author 5 minutes ago, Karpati said:Can you tell us how did you extract the .dat files from the .bin files?using quickbms https://aluigi.altervista.org/bms/transformers_89546412.bms
Yesterday at 03:17 PM1 day Localization 2 hours ago, wedjklwkerfjgfkewgfh43ertg said:using quickbmshttps://aluigi.altervista.org/bms/transformers_89546412.bmsI did find it already, but it does not work on my .bin files:signature of 4 bytes at offset 0x00000000 doesn't match the one expected by the scriptI have a com-hasbro-tf360appstore-1009000-24499790-acfe611344909db62f9976c9660c6f58.apk file (about 45 MB)..apk\assets\database_bin\database\character\characters.bin
Yesterday at 03:28 PM1 day Author 9 minutes ago, Karpati said:I did find it already, but it does not work on my .bin files:signature of 4 bytes at offset 0x00000000 doesn't match the one expected by the scriptI have a com-hasbro-tf360appstore-1009000-24499790-acfe611344909db62f9976c9660c6f58.apk file (about 45 MB)..apk\assets\database_bin\database\character\characters.bindont use the characters.bin from the apk instead use the bin files from the obbwhich is in main.1009000.com.hasbro.tf360appstore.obb\hydra\characters\
Yesterday at 04:25 PM1 day Localization 56 minutes ago, wedjklwkerfjgfkewgfh43ertg said:dont use the characters.bin from the apk instead use the bin files from the obbwhich is in main.1009000.com.hasbro.tf360appstore.obb\hydra\characters\Thank you for your information. I did find the Transformers_+RobotsInDisguise_1.9.0_APKPure.xapk file on the Net and I have .dat files from the .obb / .bin files. Edited yesterday at 04:28 PM1 day by Karpati
10 hours ago10 hr Supporter Well there's no need for header. Everything is here. The first uint32 is vertex count. After that is buffer which can be sometimes aligned on the end.//------------------------------------------------ //--- 010 Editor v14.0 Binary Template // // File: // Authors: // Version: // Purpose: // Category: // File Mask: // ID Bytes: // History: //------------------------------------------------ uint32 VertexCount; struct { float VPosX,VPosY,VPosZ; }Vertices[VertexCount]; uint32 NormalCount; struct { float VNPosX,VNPosY,VNPosZ; }Normals[NormalCount]; uint32 UVCount; struct { float UVPosX,UVPosY; }UV[UVCount]; uint32 Unknown_0; uint32 BoneIndexCount; struct { byte BIndX,BIndY,BIndZ,Reserved; }BoneIndices[BoneIndexCount]<optimize=false>; uint32 BoneWeightCount; struct { float BWeightX,BWeightY,BWeightZ,Reserved; }BoneWeights[BoneWeightCount]; uint32 Unknown_1; uint32 IndexCount; struct { uint16 F1,F2,F3; }Indices[IndexCount / 3];Send more samples if you want solve it. Edited 6 hours ago6 hr by h3x3r
8 hours ago8 hr Author nice!i wonder if its possible to figure out the skeletal data there is an .ent file that is an animation database of some sorts that has names for the bonesinteresting in beeside using the highlight function in modelresearcher besides the 41 0c 00 00 and other bytes there is a whole chunk which starts at the 4th instance of the magic 4 bytes after the 00 00 00 00 at the end of the uv chunk (offset 0x18834) and end at the 4 bytes that presede the face chunk (offset 0x027d53)i wonder if this is the skeletal data?ironhide's casehere is beeside's mesh if anyone more skilled wants to investigate00000027.rar
8 hours ago8 hr Localization This morning I added a new .dat loader module to my program, but I did not released it yet.
8 hours ago8 hr Localization On 10/19/2026 at 5:24 PM, wedjklwkerfjgfkewgfh43ertg said:awhile back i asked for help on the texture format for the rid game@DKDave quickly figured it out so credits to him and did figure out the format for the model which was part of the examples zipyou get the verticesCan you tell us how did you extract the texture files?(I don't know which file contains the texture files.)
7 hours ago7 hr Author 8 minutes ago, Karpati said:Can you tell us how did you extract the texture files?(I don't know which file contains the texture files.)i wonder what these 12 bytes contain looking at them they are like this04 00 00 00 XX XX XX XX XX XX XX 00the first 4 bytes and the last byte never changebut i tried making a noesis script which is a modified version of the script for the xgm texture for angry birds transformers by Acewellbut not know how code got error on line 12 tex_transformers_rid.py
7 hours ago7 hr Supporter 1 hour ago, wedjklwkerfjgfkewgfh43ertg said:there is a whole chunk which starts at the 4th instance of the magic 4 bytes after the 00 00 00 00 at the end of the uv chunk (offset 0x18834) and end at the 4 bytes that presede the face chunk (offset 0x027d53)i wonder if this is the skeletal data?Could be. I checked values and they are to low to be vertex colors. So maybe these are bone indexes. But no idea where is skeleton or hpw to apply to the model.
6 hours ago6 hr Supporter Yep that's definitely include skeleton data. But still no idea how to bind it to the model.I will check textures and try to write noesis if it support ETC algo.Also that align check looks like static based on another model.Here's struct for textures. Not sure how many pixel formats are there.uint32 PixelFormat; uint16 TextureWidth; uint16 TextureHeight; uint32 TextureDataSize; byte TextureData[TextureDataSize];Well this should work... If you encounter any other pixel format just let me know. I don't have game files so I can't check.from inc_noesis import * import noesis import rapi import os def registerNoesisTypes(): handle = noesis.register("Transformers - Robots in Disguise / Android - Texture", ".dat") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadRGBA(handle, noepyLoadRGBA) noesis.logPopup() return 1 def noepyCheckType(data): bs = NoeBitStream(data) if len(data) < 20: return 0 return 1 def noepyLoadRGBA(data, texList): ctx = rapi.rpgCreateContext() bs = NoeBitStream(data) baseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName())) PixelFormat = bs.readUInt() TextureWidth = bs.readUShort() TextureHeight = bs.readUShort() TextureDataSize = bs.readUInt() data = bs.read(TextureDataSize) if PixelFormat == 4: data = rapi.imageDecodeETC(data, TextureWidth, TextureHeight, "RGB") texFmt = noesis.NOESISTEX_RGBA32 else: print("Unknown Pixel Format > ", PixelFormat) texList.append(NoeTexture(rapi.getInputName(), TextureWidth, TextureHeight, data, texFmt)) return 1And here for model.from inc_noesis import * import noesis import rapi import os def registerNoesisTypes(): handle = noesis.register("Transformers - Robots in Disguise / Android - Model", ".dat") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadModel(handle, noepyLoadModel) noesis.logPopup() return 1 def noepyCheckType(data): bs = NoeBitStream(data) if len(data) < 20: return 0 return 1 def noepyLoadModel(data, mdlList): bs = NoeBitStream(data) baseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName())) ctx = rapi.rpgCreateContext() Underline = "_" # VertexCount = bs.readUInt() VertexBuffer = bs.read(VertexCount * 12) NormalCount = bs.readUInt() NormalBuffer = bs.read(NormalCount * 12) UVCount = bs.readUInt() UVBuffer = bs.read(UVCount * 8) bs.read(4) BoneIndexCount = bs.readUInt() BoneIndexBuffer = bs.read(BoneIndexCount * 4) BoneWeightCount = bs.readUInt() BoneWeightBuffer = bs.read(BoneWeightCount * 16) Unknown = bs.readUInt() IndexCount = bs.readUInt() // 3 IndexBuffer = bs.read(IndexCount * 6) rapi.rpgBindPositionBuffer(VertexBuffer, noesis.RPGEODATA_FLOAT, 12) rapi.rpgBindNormalBuffer(NormalBuffer, noesis.RPGEODATA_FLOAT, 12) rapi.rpgBindUV1Buffer(UVBuffer, noesis.RPGEODATA_FLOAT, 8) rapi.rpgBindBoneIndexBuffer(BoneIndexBuffer, noesis.RPGEODATA_BYTE, 4, 3) rapi.rpgBindBoneWeightBuffer(BoneWeightBuffer, noesis.RPGEODATA_FLOAT, 4, 3) rapi.rpgCommitTriangles(IndexBuffer, noesis.RPGEODATA_USHORT, IndexCount * 3, noesis.RPGEO_TRIANGLE) rapi.rpgSetOption(noesis.RPGOPT_TRIWINDBACKWARD, 1) mdl = rapi.rpgConstructModel() mdlList.append(mdl) return 1 Edited 6 hours ago6 hr by h3x3r
6 hours ago6 hr Author 44 minutes ago, h3x3r said:Yep that's definitely include skeleton data. But still no idea how to bind it to the model.I will check textures and try to write noesis if it support ETC algo.Also that align check looks like static based on another model.Here's struct for textures. Not sure how many pixel formats are there.uint32 PixelFormat; uint16 TextureWidth; uint16 TextureHeight; uint32 TextureDataSize; byte TextureData[TextureDataSize];Well this should work... If you encounter any other pixel format just let me know. I don't have game files so I can't check.from inc_noesis import * import noesis import rapi import os def registerNoesisTypes(): handle = noesis.register("Transformers - Robots in Disguise / Android - Texture", ".dat") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadRGBA(handle, noepyLoadRGBA) noesis.logPopup() return 1 def noepyCheckType(data): bs = NoeBitStream(data) if len(data) < 20: return 0 return 1 def noepyLoadRGBA(data, texList): ctx = rapi.rpgCreateContext() bs = NoeBitStream(data) baseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName())) PixelFormat = bs.readUInt() TextureWidth = bs.readUShort() TextureHeight = bs.readUShort() TextureDataSize = bs.readUInt() data = bs.read(TextureDataSize) if PixelFormat == 4: data = rapi.imageDecodeETC(data, TextureWidth, TextureHeight, "RGB") texFmt = noesis.NOESISTEX_RGBA32 else: print("Unknown Pixel Format > ", PixelFormat) texList.append(NoeTexture(rapi.getInputName(), TextureWidth, TextureHeight, data, texFmt)) return 1works thanks
Create an account or sign in to comment