October 7Oct 7 Hello everyone.So very few people here from XenTax knew me for trying to rip models from Giana Sisters: Twisted Dreams. Well, I have the good news that I eventually figured out the model and skeleton format! I mainly use MeshFinder made by Durik256. It's a bit tricky as I had to do A LOT of fail & retry but the results were worth it.Long story short, the vertices data are 32 bytes long in half-float; 8 bytes for the position, 8 bytes for the normals and 8 bytes for the two UV maps (UV 1 is the first half and UV 2 is the second half). I still have no idea what the other 8 bytes are. Bone indices and weight are 4 bytes each, each bytes represent a bone which means a vertex can be affected by 4 weight groups. The skeleton is abit tricky for me to explain, so I hope the picture below can explain itself.With everything in place, the model can be exported with everything it needs. However, I've come to an issue with the tool regarding the bonemap. I always export it to the tool's format (.durik256) and use the Noesis script to convert as the tool doesn't let me use the other export options. but when doing so in Noesis, It always says "weight contains an out of range bone index", even though I double checked multiple times.I've come to the conclusion I might be doing something wrong with the bonemap. Or it could be the tool that can't understand that FF means 00 in the bone indices, and not data for a non-existing 256th bone.Here are the files below. The model can be found in giana_cute mesh.bin.nx and hold vertices, weight and face data. It used to be combined with all the models of the game, so I isolated it for convenience. rendershape.bin.nx holds the skeleton data and can be found at the address 1D0D0. I also added the template so you wouldn't have to insert everything on your own.If any here who is familiar with MeshFinder and can help would be appreciated, altough I highly doubt only Durik himself can help as he made the tool and Noesis script. giana_cute model data.zip
October 7Oct 7 Supporter I can't see any element buffer info. It must be in another file. I mean element count, index count and offsets.Well maybe in rendershape.bin. Edited October 7Oct 7 by h3x3r
October 7Oct 7 Author 22 minutes ago, h3x3r said:I can't see any element buffer info. It must be in another file. I mean element count, index count and offsets.Well maybe in rendershape.bin.Element buffer? Honestly, that's the first time I read about it. I have other files that might help, but I'm not sure if that could help as I'm not familiar with the element buffer at all you mentioned.Here: the rest.zip
October 8Oct 8 Supporter So the info is in rendershape.bin as I suspected. I got first glimps... I'll take a look once i got some time. After work.
October 8Oct 8 Author Okay, I managed to get the model with her weight groups intact but by manualy edit the bone indices from 255 to 0. Even if it's a way to rip the models, there's no way I'm doing this again how much this is time consuming. If only the BoneMap area in MeshFinder was doing something and makes things easy, or a script that can automatically edit the bone indices from 255 to 0 for any models of the game.
October 8Oct 8 Supporter Solution On 10/7/2026 at 4:48 PM, GianaSistersFan64 said:Noesis scripttry it fmt_nx.pyrendershape.bin.nx contains several different skeletons.I then analyzed the file structure in greater detail and discovered direct links:Shape → LOD → Surface → SkeletonIn other words, each model in rendershape.bin.nx explicitly specifies the skeleton it requires.
October 8Oct 8 Author 23 minutes ago, Durik256 said:try it fmt_nx.pyrendershape.bin.nx contains several different skeletons.I then analyzed the file structure in greater detail and discovered direct links:Shape → LOD → Surface → SkeletonIn other words, each model in rendershape.bin.nx explicitly specifies the skeleton it requires.yes. YES!This is doing exactly what I needed, thank you so much! I tried with another model and it works smoothly. Although for this to work, I have to grab a model inside the rendermesh files and isolate it (the same thing as I did for Cute Giana's model). But it's not much of an issue.Finally after 6 years, my dream as came true. Even though the vertex animation/morph isn't still fully covered yet, it's better than nothing or just plain OBJs.
October 8Oct 8 Author 3 hours ago, Durik256 said:try it fmt_nx.pyrendershape.bin.nx contains several different skeletons.I then analyzed the file structure in greater detail and discovered direct links:Shape → LOD → Surface → SkeletonIn other words, each model in rendershape.bin.nx explicitly specifies the skeleton it requires.I looked at the script and I noticed it says:# The isolated raw mesh has lost its original owning ShapeEntry ID. # Aliases may therefore remain (in this sample: giana and maria), but they # describe identical geometry and point to the same SkeletonEntry. We only # accept the direct metadata path if all remaining aliases agree.So I'm putting the original rendermesh_1.bin.nx file, but I have to warn the file is almost 100 MB. I excluded rendermesh_0.bin.nx as it only contains models that don't have rigging stuff (and the zip file would be way too big).I'm sharing the file through Drive because it seems too big to be attached here: https://drive.google.com/file/d/13g9QMkHWc7-K65Lk7dHcl9mthkfS3E7f/view?usp=sharingAlso, There are two games that use the same engine therefore use the same format, that being Giana Sisters: Dream Runners and Bubsy: The Woolies Strike Back. But their keys differences are the files have 32-bit integers with the win32 extension, while the nx files have 64-bit integers for certain offset fields. Dream Runners also have every models of the game assembled in two files, while Bubsy only have the models that the level needs (which means the file is at the same directory as rendershape).bubsy_win32.zipBut thanks again for the script!EDIT: While checking other models in rendermesh_1, I found some of them having a different model format. Here's an example at adresse FEE8B4EDIT2: Okay, turns out the vertices data are 36 bytes long instead of 32 with a shift of 4 bytes before the normals data. I edited the script a bit and it works! Also I was 8 bytes too far from the previous screenshot.EDIT3: Had to do the same thing for the piranha model, as it uses only one UV map, which makes the vertices data 28 bytes long. Edited October 9Oct 9 by GianaSistersFan64
October 13Oct 13 Author Okay, I dug a bit more about the vertex animation (morph or blend shape, however it can be called) and it appears the first data that can be found regarding these are in rendermesh_1.bin.nx and starts at adresse 01B125510. from what I understood about the format, each vertex is 16 bytes long, first half is the position and second half is the normals. There are no headers or specific bytes that separate each animations, and it has every animation frames from each models.It starts with bush models from the levels.A GIF to demonstrate one of the transformation (it was done with multiple screenshots in 3D Model Researcher). I tried to do the same thing with another animation but for a reason I can't figure out yet, I cound't. It's not easy to find the correct amount of vertices they use.Many of these transformations are related to models that can be found in rendermesh_0.bin.nx, so here it is if you need it: https://drive.google.com/file/d/1Pk98O0KOnVJ_PikYxIsN9Z87TGQ3J4BC/view?usp=sharing
Create an account or sign in to comment