The Forum is up for sale: XeNTaX Forum looking for new owner
Music Gril For Miku (Music Girl 初音ミク)
Music Gril For Miku (Music Girl 初音ミク)
website http://mg-miku.com/
There's a game in iphone , it named "Music Gril For Miku"
My friend thought that there were models in it,and he try his best to do it.
Can anybody help us to rip the model?
http://www.mediafire.com/?k1ugotv1l13di5t
This is one of the game file of "Music Gril For Miku".
------------------------------------------
Sorry for my bad English.
Thanks for every body.
There's a game in iphone , it named "Music Gril For Miku"
My friend thought that there were models in it,and he try his best to do it.
Can anybody help us to rip the model?
http://www.mediafire.com/?k1ugotv1l13di5t
This is one of the game file of "Music Gril For Miku".
------------------------------------------
Sorry for my bad English.
Thanks for every body.
Last edited by x=? on Sat Aug 25, 2012 3:34 am, edited 2 times in total.
Re: Hello every body,can anybody give us a help?please.
And we thought the model is the project diva f's model.
You do not have the required permissions to view the files attached to this post.
-
finale00
- M-M-M-Monster veteran

- Posts: 2382
- Joined: Sat Apr 09, 2011 1:22 am
- Has thanked: 170 times
- Been thanked: 307 times
Re: Hello every body,can anybody give us a help?please.
You need to upload more model samples there are a bunch of offsets, I can see a vertex buffer and index buffer but I don't see any counts.
I have an idea of the basic outline of the format but don't know how to read the specifics.
Also maybe your friend can share some info?

Send an entire model as well (head, body, etc.) along with other random models
I suspect they use "h" for "head", "b" for "body", and others.
I have an idea of the basic outline of the format but don't know how to read the specifics.
Also maybe your friend can share some info?

Send an entire model as well (head, body, etc.) along with other random models
I suspect they use "h" for "head", "b" for "body", and others.
-
mikulover39
- advanced
- Posts: 61
- Joined: Tue Nov 22, 2011 10:55 am
- Has thanked: 13 times
- Been thanked: 88 times
Re: Hello every body,can anybody give us a help?please.
well me and my friend have been looking at these files and the files are seperated into c001.mdl (guessing is the main body) and h001.mdl whilst the physics are in c001.jpx and so far only 2 models in game the rest are just menues and stuff (2 more are planned for future release) we also suspect that the .acv files are textures but are unsure
thats all we got .-.
thats all we got .-.
-
finale00
- M-M-M-Monster veteran

- Posts: 2382
- Joined: Sat Apr 09, 2011 1:22 am
- Has thanked: 170 times
- Been thanked: 307 times
Re: Hello every body,can anybody give us a help?please.
Upload all of them and textures. There should be a file for the materials as well since it does not appear to be stored in the model.
-
mikulover39
- advanced
- Posts: 61
- Joined: Tue Nov 22, 2011 10:55 am
- Has thanked: 13 times
- Been thanked: 88 times
Re: Hello every body,can anybody give us a help?please.
Well.Do you want the whole game file?finale00 wrote:You need to upload more model samples there are a bunch of offsets, I can see a vertex buffer and index buffer but I don't see any counts.
I have an idea of the basic outline of the format but don't know how to read the specifics.
Also maybe your friend can share some info?
Send an entire model as well (head, body, etc.) along with other random models
I suspect they use "h" for "head", "b" for "body", and others.
-
finale00
- M-M-M-Monster veteran

- Posts: 2382
- Joined: Sat Apr 09, 2011 1:22 am
- Has thanked: 170 times
- Been thanked: 307 times
Re: Hello every body,can anybody give us a help?please.
It was sent to me already.
What is the format of the PVR textures?
EDIT: nvm looks like someone (chrrox?) already wrote one for another game.
What is the format of the PVR textures?
EDIT: nvm looks like someone (chrrox?) already wrote one for another game.
Re: Hello every body,can anybody give us a help?please.
Sorry , I don't know . I and my friend trying to use some softwave to open the file , but we fail , can you give us a help?finale00 wrote:It was sent to me already.
What is the format of the PVR textures?
EDIT: nvm looks like someone (chrrox?) already wrote one for another game.
-
mariokart64n
- ultra-veteran

- Posts: 585
- Joined: Sun Jun 05, 2005 12:00 pm
- Location: Ontario, Canada
- Has thanked: 36 times
- Been thanked: 240 times
Re: Hello every body,can anybody give us a help?please.
Some random guy on deviantArt, gave me a link and said please convert these lol
I was waiting for hm to give me more samples or even the name of the game I was looking at lol.. I think maybe he forgot about me >_<
Anyway everything usually ends up here, and sure enough the sample file here matches the one sent to me on dA.
the IGB format for PSP is insane! and I wouldn't be surprised if this format wasn't just as insane.. the format starts with alot of offsets, which bounce almost randomly through out the entire file.
theres not much for counts, any counts relate to tables that are full of more offsets.
I couldn't decipher any of it sadly
I did some fancy foot work though and attempted to calculate the vertex buffer count. this is dependent on locating the correct offset for the facebuffer.. which seems to move around so its hard to know if you read the right one or not.
anyways I give up, so here's was my work on it (maxscript). theres a count after the vertex buffer, which will get you the first object from the face buffer. after that there is no count, so no way to correctly read in the other objects. but even if you keyed in the length manfully, theres only like 20% data left in the entire face buffer.. which won't support all the missing geometry O_O this really boggles my mind.. I looked further down the file and cannot find another face buffer. very confusing.
good news is that there is a specific table for the PVR textures. so if we knew the PVR format, then it would seem to be easy to dump them

edit updated script to dump texture data. pvr files spit out, which you can open with texture packer.
also to clarify this, Music Girl Miku is a free iSO app
http://app.moefou.org/app/512849356
so its free game ^_^
I was waiting for hm to give me more samples or even the name of the game I was looking at lol.. I think maybe he forgot about me >_<
Anyway everything usually ends up here, and sure enough the sample file here matches the one sent to me on dA.
the IGB format for PSP is insane! and I wouldn't be surprised if this format wasn't just as insane.. the format starts with alot of offsets, which bounce almost randomly through out the entire file.
theres not much for counts, any counts relate to tables that are full of more offsets.
I couldn't decipher any of it sadly
I did some fancy foot work though and attempted to calculate the vertex buffer count. this is dependent on locating the correct offset for the facebuffer.. which seems to move around so its hard to know if you read the right one or not.
anyways I give up, so here's was my work on it (maxscript). theres a count after the vertex buffer, which will get you the first object from the face buffer. after that there is no count, so no way to correctly read in the other objects. but even if you keyed in the length manfully, theres only like 20% data left in the entire face buffer.. which won't support all the missing geometry O_O this really boggles my mind.. I looked further down the file and cannot find another face buffer. very confusing.
good news is that there is a specific table for the PVR textures. so if we knew the PVR format, then it would seem to be easy to dump them

Code: Select all
clearlistener()
obj=$*;delete obj
mscale=3.93700787
fsource = GetOpenFileName \
caption:"Music Girl: Hatsune Miku" \
types: "Model Files (*.mdl)|*.mdl|"
-- fsource = "F:\\D-O\\Mikie\\Modle2\\c002.mdl"
-- fsource = "F:\\D-O\\Mikie\\h002.mdl"
if (fsource!=undefined) AND ((doesFileExist fsource)==true) then(
-- fpath=getFilenamePath fsource
-- fname=getFilenameFile fsource
-- fsize=getFileSize fsource
f = fopen fsource "rb"
vertArray = #()
normArray = #()
uvwArray = #()
faceArray = #()
mdl = readlong f #unsigned
if mdl == 0x206C646D then(
mdlversion = readlong f
ukn1 = readlong f -- null?
ukn2 = readlong f -- null?
ukn3 = readlong f -- count?
fseek f (0x60) #seek_set -- skips more 0's
for i = 1 to ukn3 do(
getPos = ftell f + 80
ukn3_flag1 = readlong f -- always 1
ukn3_offset1 = readlong f -- offset?
fseek f getPos #seek_set -- skips series of floats
)
ukn4_1a = readlong f -- count
ukn4_1b = readlong f -- offset
ukn4_1c = readlong f --null
ukn4_1d = readlong f -- null
ukn4_2a = readlong f -- count
ukn4_2b = readlong f -- offset
ukn4_2c = readlong f --null
ukn4_2d = readlong f -- null
-- texture offset table
ukn4_3a = readlong f -- count
ukn4_3b = readlong f -- offset
ukn4_3c = readlong f -- ?? flags, float?
ukn4_3d = readlong f -- always 0x00007FFF ?
vertex_offset = readlong f #unsigned
offsetArray=#()
while (ftell f)!=ukn4_3b do(append offsetArray (readlong f #unsigned))
for i = 1 to offsetArray.count do(
fseek f offsetArray[i] #seek_set
check = readlong f #unsigned
if check<=0xFFFF then EXIT
)
fseek f -4 #seek_cur
face_offset = ftell f
vertex_count = (face_offset - vertex_offset)/32
vertArray=#();vertArray[vertex_count]=[0,0,0]
uvwArray=#();uvwArray[vertex_count]=[0,0,0]
normArray=#();normArray[vertex_count]=[0,0,0]
fseek f vertex_offset #seek_set
for i = 1 to vertex_count do(
vx = readfloat f
vy = readfloat f
vz = readfloat f
nx = readfloat f
ny = readfloat f
nz = readfloat f
tu = readfloat f
tv = readfloat f
vertArray[i]=([vx,-vz,vy]*mscale)
normArray[i]=[nx,-nz,ny]
uvwArray[i]=[tu,tv,0]
)
fseek f face_offset #seek_set
face_count = readlong f #unsigned
fa = readshort f #unsigned + 1
fb = readshort f #unsigned + 1
fc = readshort f #unsigned + 1
append faceArray [fa,fb,fc]
for i = 1 to (face_count-3) do (
fa = fb
fb = fc
fc = readshort f #unsigned + 1
if (mod i 2)==1 then(append faceArray [fa,fc,fb])
else(append faceArray [fa,fb,fc]))
try(
msh = mesh vertices:vertArray faces:faceArray
msh.numTVerts = uvwArray.count
buildTVFaces msh
msh.displayByLayer = false
msh.backfacecull = on
msh.wirecolor = random (color 0 0 0) (color 255 255 255)
for j = 1 to uvwArray.count do setTVert msh j uvwArray[j]
for j = 1 to faceArray.count do setTVFace msh j faceArray[j]
-- for j = 1 to normArray.count do setNormal msh j normArray[j]
convertTo msh PolyMeshObject
select msh
modPanel.setCurrentObject msh
subobjectLevel = 1
)catch(Print "Import Failed")
)else(Print "Failed to read MDL header")
Print ("Last Read @ 0x"+((bit.intAsHex(ftell f))as string))
)else(Print "Aborted.")
fclose fedit updated script to dump texture data. pvr files spit out, which you can open with texture packer.
also to clarify this, Music Girl Miku is a free iSO app
http://app.moefou.org/app/512849356
so its free game ^_^
Code: Select all
clearlistener()
obj=$*;delete obj
mscale=3.93700787
-- fsource = GetOpenFileName \
-- caption:"Music Girl: Hatsune Miku" \
-- types: "Model Files (*.mdl)|*.mdl|"
fsource = "F:\\D-O\\Mikie\\Modle2\\c002.mdl"
-- fsource = "F:\\D-O\\Mikie\\h002.mdl"
if (fsource!=undefined) AND ((doesFileExist fsource)==true) then(
fpath=getFilenamePath fsource
fname=getFilenameFile fsource
fsize=getFileSize fsource
f = fopen fsource "rb"
vertArray = #()
normArray = #()
uvwArray = #()
faceArray = #()
mdl = readlong f #unsigned
if mdl == 0x206C646D then(
mdlversion = readlong f
ukn1 = readlong f -- null?
ukn2 = readlong f -- null?
ukn3 = readlong f -- count?
fseek f (0x60) #seek_set -- skips more 0's
for i = 1 to ukn3 do(
getPos = ftell f + 80
ukn3_flag1 = readlong f -- always 1
ukn3_offset1 = readlong f -- offset?
fseek f getPos #seek_set -- skips series of floats
)
ukn4_1a = readlong f -- count
ukn4_1b = readlong f #unsigned -- offset
ukn4_1c = readlong f --null
ukn4_1d = readlong f -- null
ukn4_2a = readlong f -- count
ukn4_2b = readlong f #unsigned -- offset
ukn4_2c = readlong f --null
ukn4_2d = readlong f -- null
-- texture offset table
ukn4_3a = readlong f -- count
ukn4_3b = readlong f #unsigned -- offset
ukn4_3c = readlong f -- ?? flags, float?
ukn4_3d = readlong f -- always 0x00007FFF ?
try_to_read_geometry = true
if try_to_read_geometry==true do(
vertex_offset = readlong f #unsigned
offsetArray=#()
while (ftell f)!=ukn4_3b do(append offsetArray (readlong f #unsigned))
for i = 1 to offsetArray.count do(
fseek f offsetArray[i] #seek_set
check = readlong f #unsigned
if check<=0xFFFF then EXIT
)
fseek f -4 #seek_cur
face_offset = ftell f
vertex_count = (face_offset - vertex_offset)/32
vertArray=#();vertArray[vertex_count]=[0,0,0]
uvwArray=#();uvwArray[vertex_count]=[0,0,0]
normArray=#();normArray[vertex_count]=[0,0,0]
fseek f vertex_offset #seek_set
for i = 1 to vertex_count do(
vx = readfloat f
vy = readfloat f
vz = readfloat f
nx = readfloat f
ny = readfloat f
nz = readfloat f
tu = readfloat f
tv = readfloat f
vertArray[i]=([vx,-vz,vy]*mscale)
normArray[i]=[nx,-nz,ny]
uvwArray[i]=[tu,-tv,0]
)
fseek f face_offset #seek_set
face_count = readlong f #unsigned
fa = readshort f #unsigned + 1
fb = readshort f #unsigned + 1
fc = readshort f #unsigned + 1
append faceArray [fa,fb,fc]
for i = 1 to (face_count-3) do (
fa = fb
fb = fc
fc = readshort f #unsigned + 1
if (mod i 2)==1 then(append faceArray [fa,fc,fb])
else(append faceArray [fa,fb,fc]))
-- fseek f (0x23834) #seek_set
-- count=100
-- fa = readshort f #unsigned + 1
-- fb = readshort f #unsigned + 1
-- fc = readshort f #unsigned + 1
-- append faceArray [fa,fb,fc]
-- for i = 1 to (count-3) do (
-- fa = fb
-- fb = fc
-- fc = readshort f #unsigned + 1
-- if (mod i 2)==1 then(append faceArray [fa,fc,fb])
-- else(append faceArray [fa,fb,fc]))
try(
msh = mesh vertices:vertArray faces:faceArray
msh.numTVerts = uvwArray.count
buildTVFaces msh
msh.displayByLayer = false
msh.backfacecull = on
msh.wirecolor = random (color 0 0 0) (color 255 255 255)
for j = 1 to uvwArray.count do setTVert msh j uvwArray[j]
for j = 1 to faceArray.count do setTVFace msh j faceArray[j]
-- for j = 1 to normArray.count do setNormal msh j normArray[j]
max tool zoomextents
convertTo msh PolyMeshObject
select msh
-- modPanel.setCurrentObject msh
-- subobjectLevel = 1
)catch(Print "Import Failed")
) -- end try_to_read_geometry
struct texture_entry (offset,size,format,hash)
textureArray = (texture_entry offset:#() size:#() format:#() hash:#())
fseek f ukn4_3b #seek_set
for i = 1 to ukn4_3a do (
append textureArray.offset (readlong f #unsigned) -- offset
append textureArray.size (readlong f #unsigned) -- size
append textureArray.format (readlong f #unsigned) -- format flag? 0x00=PNG | 0x01=PVR
append textureArray.hash (readlong f #unsigned) -- flags?, hash?
)
for i = 1 to textureArray.offset.count do(
fseek f textureArray.offset[i] #seek_set
sext = "."
case of(
(textureArray.format[i]==0): (sext += "png")
(textureArray.format[i]==1): (sext += "pvr")
default:(sext += "dat")
)
s = fopen (fpath+fname+"_"+(textureArray.hash[i] as string)+sext) "wb"
for x = 1 to textureArray.size[i] do (
writebyte s (readbyte f #unsigned) #unsigned
)
fflush s
fclose s
)
)else(Print "Failed to read MDL header")
Print ("Last Read @ 0x"+((bit.intAsHex(ftell f))as string))
)else(Print "Aborted.")
fclose fMaxscript and other finished work I've done can be found on my DeviantArt account
-
finale00
- M-M-M-Monster veteran

- Posts: 2382
- Joined: Sat Apr 09, 2011 1:22 am
- Has thanked: 170 times
- Been thanked: 307 times
Re: Hello every body,can anybody give us a help?please.
Can't get the texture parser for noesis to load the PVR properly by handler.
But, the mesh format is straightforward

mariokart, for the vertex and face offsets, they are stored sequentially.
So the first vert offset goes with the first face offset, second vert offset with the second face offset, etc.
The fact struct is just
btw, I can't find miku's normal outfit.
the c001 and h001 files look like something entirely different.
But, the mesh format is straightforward

mariokart, for the vertex and face offsets, they are stored sequentially.
Code: Select all
int[numMesh] vert offsets
int[numMesh] face offsets
int[numMesh] more offsets?
# tex info after
...
The fact struct is just
Code: Select all
struct Face {
short numIdx
short matNum # maybe
short[numIdx] indices
}
the c001 and h001 files look like something entirely different.
-
mariokart64n
- ultra-veteran

- Posts: 585
- Joined: Sun Jun 05, 2005 12:00 pm
- Location: Ontario, Canada
- Has thanked: 36 times
- Been thanked: 240 times
Re: Hello every body,can anybody give us a help?please.
I felt pretty stupid after chrrox pointed out the offsets >_< hehe
yeah I only got what you got there. I'm trying to buy a japanese itunes card so I can buy whatever DLC for this game
yeah I only got what you got there. I'm trying to buy a japanese itunes card so I can buy whatever DLC for this game
Maxscript and other finished work I've done can be found on my DeviantArt account
-
finale00
- M-M-M-Monster veteran

- Posts: 2382
- Joined: Sat Apr 09, 2011 1:22 am
- Has thanked: 170 times
- Been thanked: 307 times
Re: Hello every body,can anybody give us a help?please.
Btw do you know how the materials work?
For example, the head model has 6 textures, but there are only 4 meshes. Though I didn't actually look at the textures so they might have been like "alternate colours" or something.
For example, the head model has 6 textures, but there are only 4 meshes. Though I didn't actually look at the textures so they might have been like "alternate colours" or something.
-
mariokart64n
- ultra-veteran

- Posts: 585
- Joined: Sun Jun 05, 2005 12:00 pm
- Location: Ontario, Canada
- Has thanked: 36 times
- Been thanked: 240 times
Re: Hello every body,can anybody give us a help?please.
yeah just implemented materials in my maxscript
at the start of the file you get mesh count, then a table giving you object count, vertex count, and some matrix info for object positioning
after this is an offset list.. theres actually 2. the first one has 3 entries, containing 4 Longs. the first long is count, second long is offset.
first entry is bones, second entry is materials, and third entry is textures
the bone offset pops over to a list of matrices, chrrox was explaning the bone format. but I havent implmented yet.
the material offset brings you to the mat entriesm each 64bytes in length. the long at 0x20 is the texture index. this relates to the order in which they are defined in the texture info later
the texture offset then brings you to a table with offset and size, and some null info.
after that its just buffer. now as your parsing each face buffer, you'll have count short, and material id short, then the faces as shorts.
thats about it. I still havent found the bone weights
at the start of the file you get mesh count, then a table giving you object count, vertex count, and some matrix info for object positioning
after this is an offset list.. theres actually 2. the first one has 3 entries, containing 4 Longs. the first long is count, second long is offset.
first entry is bones, second entry is materials, and third entry is textures
the bone offset pops over to a list of matrices, chrrox was explaning the bone format. but I havent implmented yet.
the material offset brings you to the mat entriesm each 64bytes in length. the long at 0x20 is the texture index. this relates to the order in which they are defined in the texture info later
the texture offset then brings you to a table with offset and size, and some null info.
after that its just buffer. now as your parsing each face buffer, you'll have count short, and material id short, then the faces as shorts.
thats about it. I still havent found the bone weights
Maxscript and other finished work I've done can be found on my DeviantArt account
-
chrrox
- Moderator
- Posts: 2602
- Joined: Sun May 18, 2008 3:01 pm
- Has thanked: 57 times
- Been thanked: 1411 times
Re: Music Gril For Miku (Music Girl 初音ミク)
The bone format is
Posx PosY PosZ 1.0
QuatX QuatY QuatZ QuatW
ScaleX ScaleY ScaleZ 1.0
1.0 1.0 1.0 1.0
Parent ? ? ?
and the weighting goes
for each vertex
read the weight count
then for each of these counts read
bone id long
weight float
also the magic number of the day is
44 90 12 28
Posx PosY PosZ 1.0
QuatX QuatY QuatZ QuatW
ScaleX ScaleY ScaleZ 1.0
1.0 1.0 1.0 1.0
Parent ? ? ?
and the weighting goes
for each vertex
read the weight count
then for each of these counts read
bone id long
weight float
also the magic number of the day is
44 90 12 28
