Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

Marmalade SDK (.group.bin) 3D mesh extraction

Featured Replies

Need help with Marmalade SDK (.group.bin) 3D mesh extraction - Tone Sphere

Hello everyone! I am trying to extract 3D meshes from the mobile game Tone Sphere (Marmalade SDK).

I used a script to split the mono .group.bin file into separate assets. Now I have a 1.4 MB file (dc3c2177) which definitely contains a 3D mesh.

Here is what I found out using HEX and Model Researcher:

Faces / Indices Offset: starts exactly at 0x15C550 (Format: 16-bit Unsigned Short).

Maximum Index: 60288

Vertices: Located right before the faces, but they seem to use fixed-point math (IwFixed / Short_Signed with scaling), which causes a huge mess and wrong scaling when reading via Model Researcher.

UV / Normals: Also packed right before the vertices.

Could anyone help me write a quick Noesis plugin or a Python script to properly parse this mesh? I can provide the sample file! Thanks in advance!

Снимок экрана 2026-06-08 201817.png

Снимок экрана 2026-06-08 201912.png

Снимок экрана 2026-06-08 201931.png

Снимок экрана 2026-06-08 202528.png

dc3c2177.zip

  • Supporter

Hi, you missed to tell where the vertices start?

I could only find some strange point cloud:

MarmeladeDK_PtCld.png

edit: big parts seem to contain texture data:

Marmelade.png

Edited by shak-otay

  • Author

Indices Offset: 0x15C550

Indices Type: UInt16 (Short)

Indices Count: 16 026 (5342 triangles)

Max Index Value: 2667 (Which means Vertex Count = 2668)

Vertices Offset: 0x1586C8

Vertex Type: Int16 (Short)

Stride: 6 bytes (Pure X, Y, Z by 2 bytes each)

Coordinate Scale (Fixed-point): Try dividing by 4096.0 or 256.0 (Standard Marmalade SDK shift).

  • Supporter

Thanks. Which file is it for? For dc3c2177 your face index parameters would break the file end (15C79F), 0x15C550 + 16026x2 (dec.)= 0x164284

Your vertex offset doesn't show me a decent mesh:

trash.png

edit: the vertices start at 0x155D38, see one of my next posts

 

Edited by shak-otay

  • Author

thank
For file dc3c2177. Honestly, I don't quite understand how to search for vertices, so I'm just pointing my finger at it. Perhaps I've send the parameters for a different file altogether. I was checking the lesson level file. What I send is the title screen.
And I also know there may be multiple models embedded there. Or it's not a model at all, but a level scene.

And file 8081e087 is just its name, it says title screen there

Edited by IDANAND

  • Localization

In dc3c2177 there are multiple meshes, for the last one:
At 1421408, 320 x 3 shorts (position?)
At 1423344, 320 x 3 shorts in range [-4096;4096] (normals?) 
At 1425278, 320 x 2 shorts (UV, divide by 4096)
At 1426576, 384 shorts (indices)

UV looks fine, but mesh is a mess
image.thumb.png.281f34e35dd35f284d53c784ad7f6cfc.png

  • Supporter

When you use unsigned shorts it looks more like a cube:

cube.png

edit: another one (I'd create a tool as soon as we get the meshes nicer):

cube2.png.6163f51318d0807c20504c6d5877e6d3.png

Similar for the background_cubes group.bin:

background_cubesgroup_bin.png.523927f4fa688d94b6b828a177dbffe5.png

Edited by shak-otay

  • Author

Here are the ingame screenshots of what these meshes should look like. First one is the single crystal Or a few crystals.

 

Screenshot_20260608-215122_Tone Sphere.png

Screenshot_20260608-215126_Tone Sphere.png

Screenshot_20260608-215130_Tone Sphere.png

Screenshot_20260608-215132_Tone Sphere.png

  • Author
13 hours ago, other1 said:

In dc3c2177 there are multiple meshes, for the last one:
At 1421408, 320 x 3 shorts (position?)
At 1423344, 320 x 3 shorts in range [-4096;4096] (normals?) 
At 1425278, 320 x 2 shorts (UV, divide by 4096)
At 1426576, 384 shorts (indices)

UV looks fine, but mesh is a mess
image.thumb.png.281f34e35dd35f284d53c784ad7f6cfc.png

Hey! Thanks for the render, but the mesh geometry looks distorted. In the original game, this crystal is a perfectly symmetrical, sharp, elongated octahedron (diamond shape). On your screenshot, it looks flattened and skewed on one side. Look a screenshot.

 

Screenshot_20260608-215126_Tone Sphere~2.png

  • Author
13 hours ago, shak-otay said:

In Backgroundcubes.group.bin I found this but it's hard to extract from the point cloud:

 

bgr_cubes.png

In this file, the wall should be completely white. 

  • Author
23 hours ago, other1 said:

Вот, пожалуйста, плагин для Blender 5.0.
Проблема была в вершинах — вместо обычных (x0, y0, z0, x1, y1, z1, xN, yN, zN) они хранятся как (x1, x2, xN, y1, y2, yN, z1, z2, zN).
image.png.ee8fc07d4ff408ca26a374fcc2d3bc41.png

io_scene_tone_sphere.zip 4,54 кБ · 1 загрузка

Hey! The meshes import absolutely perfectly, the plugin works like a charm. Thanks a ton! Could you please tell me how you extracted the textures for the cube from your screenshot? Are they stored in a different .group.bin file, and what's the best way to convert them to PNG?

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.