Quantcast
Channel: The VG Resource - All Forums
Viewing all articles
Browse latest Browse all 16308

Summoners War

$
0
0
Someone offered help and asked me to share how I ripped this game's models so I decided to open this thread for those interested. I kind of quit trying to figure out so perhaps more people can continue with this.

It's a mobile game and downloads lots of files. There are many different formats but the ones for units are of "dat" extension and go like "unit_mdl_archangel.dat". In this game most monsters have "awakened" form and their name has "_hr" in it like "unit_mdl_archangel_hr.dat". Buildings/stages seem to be using a different format.

There were a few exceptions like "special_mdl_irene.dat" which have slight differences but generally the format goes like the following. (It's been a while since I worked on these so I may remember a few things wrong.) The formats are in LITTLE_ENDIAN.


Let's say the file consists of chunks, each chunk has 4 byte integer size value, then this size amount of bytes.
  • First chunk is a short unknown chunk, probably some kind of header.
  • PMM chunk which contains vertices, indices, normals, uvs and weights data. Weights seem to be 1 joint assignment per vertex.
  • PLM chunk which contains bones and animation data I think, this needs figuring out the most.
  • Textures chunk which contains PNG images for different elements. (Monsters come in various elements in the game.) Each element seems to be using a single texture for the entire model, 3D geometry is common for each element. This chunk seems to lack chunk_size value. Read below.

Now I'll explain what I managed to figure out so far regarding these chunks.

I just skip the header chunk.

PMM Chunk:
  • 4 bytes String "PMM$"
  • 2 bytes Unknown
  • 2 bytes indice_count
  • 2 bytes vertex_count
  • 4 bytes unknown
  • 2 bytes scale_divider
  • 55 bytes unknown
  • vertex_count * 12 bytes > x,y,z values each 4 bytes signed integer. Divide each by scale_divider.
  • vertex_count * 3 bytes > normal values each 1 signed byte. Divide each by 127.
  • vertex_count * 8 bytes > u,v values each 4 bytes signed integer. Divide each by 65536.
  • indice_count * 2 bytes > indice values that 3 of them make 1 face. Short value, probably unsigned .
  • vertex_count * 1 bytes > ID of the assigned joint of each vertex in order. Byte value, probably unsigned.
PLM Chunk:
  • 4 bytes String "PLM$"
  • 2 bytes > unknown_size_A
  • 20 bytes > some unknown value
  • unknown_size_A * 7 bytes > more unknown data
  • 1 byte joint_count, probably unsigned
  • 32 bytes unknown, might be armature/skeleton's values
  • joint_count * 39 bytes > So each joint has 39 bytes of data which I couldn't properly figure out. First byte is usually 0xff, second is ID (same in weights data above), third is parent joint ID. Seems to be right but can't be sure.
  • The rest is probably animation data, length can be calculated using chunk_size value. The last 4 bytes seem to be always "****" string.
Textures chunk:
  • 4 bytes > element ID probably, you can see from 1 to 6
  • 4 bytes texture_size > if 0, no texture
  • texture_size * bytes > PNG data, simply export into PNG files
(This chunk seems to lack chunk_size value. I'm thinking maybe each element texture data is supposed to be treated like a chunk on its own.)

I can't share my export codes since they are in Flash AS3 and not in a ready-to-use-by-anyone state but I believe some people here can write scripts for common programs that are usually used around here.



Here's an example file for those who don't have the game or don't want to bother getting, which should produce this model:
http://www.models-resource.com/mobile/summonerswar/model/9565/


.zip   unit_mdl_ninja.zip (Size: 510.49 KB / Downloads: 4)

Viewing all articles
Browse latest Browse all 16308

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>