### Author Topic: [FFVII] Snowboard Progress  (Read 1697 times)

#### Kuraudo.

• Crazy poster
• Posts: 137
• Karma: 5
• Panta rei
##### [FFVII] Snowboard Progress
« on: 2019-06-17 17:31:07 »
Snowboard Minigame modding scene progress by Maki.

Cheers Qhimm community.
« Last Edit: 2019-07-01 20:19:23 by Kuraudo. »

#### Kuraudo.

• Crazy poster
• Posts: 137
• Karma: 5
• Panta rei
##### Re: [FFVII] Snowboard?
« Reply #1 on: 2019-06-18 06:35:13 »
Spoiler: show
Doing a little research:

Kaldarasha was in touch with MaKiPL, some updates here.

Any progress?

.
« Last Edit: 2019-07-01 20:20:17 by Kuraudo. »

#### Maki

• Freak
• Posts: 603
• Karma: 133
• 0xCCCCCCCC
##### Re: [FFVII] Snowboard?
« Reply #2 on: 2019-07-01 16:35:29 »

Code: [Select]
`# Final Fantasy VII Snowboard TMD (Playstation TMD) to OBJ by Maki ([email protected])# Made @ 01.07.2019# version 0.1#Based on structure by http://wiki.xentax.com/index.php/Playstation_TMDimport sysimport structfilename = "for_ev.tmd" #change that for otheroutfilename = "for_ev.obj" #change that alsodef ReadInt():    return struct.unpack("<I", fd.read(4))[0]def GetVertices(pVert, nVert):    vertices = []    fd.seek(pVert, 0)    for n in range(0, nVert):        x = struct.unpack('<h', fd.read(2))[0]        y = struct.unpack('<h', fd.read(2))[0]        z = struct.unpack('<h', fd.read(2))[0]        w = struct.unpack('<h', fd.read(2))[0]        vertices += [[x,y,z]]    return verticesdef GetPolygons(pPrim, nPrim):    polygons = []    fd.seek(pPrim, 0)    for n in range(0, nPrim):        modeVariable = struct.unpack('<I', fd.read(4))[0]        if(modeVariable != 0x31010506):            print('unknown mode at: ' + str(fd.tell()))            return []        fd.seek(12,1) # unknown, UV?        A = struct.unpack('<H', fd.read(2))[0]        B = struct.unpack('<H', fd.read(2))[0]        C = struct.unpack('<H', fd.read(2))[0]        polygons += [[A,B,C]]        fd.seek(2,1)    return polygons     fd = open(filename,"rb")if(fd==None):    print("cannot open file. Exiting")    exit()if(ReadInt() != 0x41):    print("tmd version is not 0x41")    exit()fd.seek(4,1) # we don't really care for flags here. It's always 0 objCount = ReadInt()#Main arrayspVerts = []nVerts = []pNorms = []nNorms = []pPrims = []nPrims = []#Step 1- Gather info about every single object to arraysfor i in range(0,objCount):    pVerts += [ReadInt()]    nVerts += [ReadInt()]    pNorms += [ReadInt()]    nNorms += [ReadInt()]    pPrims += [ReadInt()]    nPrims += [ReadInt()]    print("===Object: {}===\nVertices: {}\tPointer: {}\nNormals: {}\tPointer: {}\nPrims: {}\tPointer: {}\nScale: {}".format(i, nVerts[i], pVerts[i], nNorms[i], pNorms[i], nPrims[i], pPrims[i], ReadInt()))#Step 2- Process gathered datafor i in range(0,objCount):    vertices = GetVertices(pVerts[i]+12, nVerts[i])    fda = open('obj{}.obj'.format(i), 'wt')    for n in vertices:        fda.write("v {} {} {}\n".format(n[0], -n[1], n[2]))    polygons = GetPolygons(pPrims[i]+12, nPrims[i])    for n in polygons:        fda.write("f {} {} {}\n".format(n[0]+1,n[1]+1,n[2]+1))    fda.close()`
This for 0.1 version. Looks like for_gs.tmd and for_en.tmd have the same data (huh??)
I'll be digging for UVs and thankfully for reimport. Should be easy

Vertices (as in TMD):
Code: [Select]
`short X;short -Y;short Z;short W; //unused`
Polygon type A:
Code: [Select]
`0x06050131 //polygon type const. Probably that means triangle and the other unknown one is quad, but that's just assumptionchar unk[12] //unkown, I'm missing three UVs, but what are other values?ushort A;ushort B;ushort C;ushort pad; //maybe a place for D?`
Polygon type B:
Code: [Select]
`0x80808000 //const?ushort A; //untestedushort B; //untestedushort C; //untestedushort PAD;char unk[16]; //not sure`
« Last Edit: 2019-07-01 16:44:46 by Maki »

#### Kuraudo.

• Crazy poster
• Posts: 137
• Karma: 5
• Panta rei
##### Re: [FFVII] Snowboard Progress
« Reply #3 on: 2019-07-01 20:21:11 »
Just Brilliant. Are there Cid and Tifa's model too?