The Forum is up for sale: XeNTaX Forum looking for new owner

Music Gril For Miku (Music Girl 初音ミク)

Post questions about game models here, or help out others!
x=?
n00b
Posts: 15
Joined: Mon Jun 25, 2012 11:28 am
Has thanked: 1 time

Music Gril For Miku (Music Girl 初音ミク)

Post by x=? »

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.
Last edited by x=? on Sat Aug 25, 2012 3:34 am, edited 2 times in total.
x=?
n00b
Posts: 15
Joined: Mon Jun 25, 2012 11:28 am
Has thanked: 1 time

Re: Hello every body,can anybody give us a help?please.

Post by x=? »

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
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.

Post by finale00 »

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?

Image

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.

Post by mikulover39 »

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 .-.
finale00
M-M-M-Monster veteran
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.

Post by finale00 »

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.

Post by mikulover39 »

check your messages and good luck
x=?
n00b
Posts: 15
Joined: Mon Jun 25, 2012 11:28 am
Has thanked: 1 time

Re: Hello every body,can anybody give us a help?please.

Post by x=? »

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?

Image

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.
Well.Do you want the whole game file?
finale00
M-M-M-Monster veteran
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.

Post by finale00 »

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.
x=?
n00b
Posts: 15
Joined: Mon Jun 25, 2012 11:28 am
Has thanked: 1 time

Re: Hello every body,can anybody give us a help?please.

Post by x=? »

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.
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?
mariokart64n
ultra-veteran
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.

Post by mariokart64n »

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


Image


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 f


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 ^_^

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 f
Maxscript and other finished work I've done can be found on my DeviantArt account
finale00
M-M-M-Monster veteran
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.

Post by finale00 »

Can't get the texture parser for noesis to load the PVR properly by handler.
But, the mesh format is straightforward

Image

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
...
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

Code: Select all

struct Face {
   short numIdx
   short matNum # maybe
   short[numIdx] indices
}
btw, I can't find miku's normal outfit.
the c001 and h001 files look like something entirely different.
mariokart64n
ultra-veteran
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.

Post by mariokart64n »

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
Maxscript and other finished work I've done can be found on my DeviantArt account
finale00
M-M-M-Monster veteran
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.

Post by finale00 »

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.
mariokart64n
ultra-veteran
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.

Post by mariokart64n »

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
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 初音ミク)

Post by chrrox »

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
Post Reply