• Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 250,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!

    You are currently viewing our boards as a visitor. Click here to sign up right now and start on your path in the Smash community!

Universal Model Converter (UMC) Development thread - Deceased

Volt_Storm_7

Smash Journeyman
Joined
Jul 26, 2010
Messages
294
Location
沖縄県、日本
Keep going Tcll, I'll be waiting for that release. Also, when you are finished with the 2.49 version, could you make it compatibly with 2.6? Reason being the new versions allow more customization and ease. Other than that, awaiting it's release.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
Keep going Tcll, I'll be waiting for that release. Also, when you are finished with the 2.49 version, could you make it compatibly with 2.6? Reason being the new versions allow more customization and ease. Other than that, awaiting it's release.
*facepalms* uugh... I completely forgot about working on that D:
you're gonna have to keep on me about that. DX

I'm more concerned with these atm:
UMC3x
REL decompilation (asm to C++ (or Py))
Dynamic Meshes (my modelling system)
HTML web browser for Wii-Opera (lol yes)

sides:
IEEE floating point arithmatic (function formula doesn't work correctly)
OpenGL modelling system structure
curve generation and extension

others:
quaternary conversion and electronics
helping noobs to program in Py


as for blender26,
I'm afraid that'll be more than it's worth D:
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
I'm watching this thread intently, as I'm hoping to see actual rips come from Melee (and not those guesses produced by the T-pose AR code and 3D print screens). Busy eyeing the Wireframes with accurate weighting and bone structure.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
lol
all I can say is I'm trying ;)

I'm working on a side converter that converts melee models into obj models (for now).
this is only to get my base modules (COMMON and FORMAT) working

this converter will be very basic, just simply asking for an input file,
and then doing it's work using the UMC3x structure.

once I get that done, I'll work on the viewer and GUI for UMC3x ;)


and btw, you don't need to hope XDD
UMC2.6c already converts Melee models into obj, but it uses an outdated formatting tecnique.
it's also very buggy and doesn't support every index in Nintendo's CP structure
(UMC3x is being completely re-designed with functions in which 2x couldn't even comprehend)

example: (DAT header)
Code:
filesize = bu32()
relocations = bu32()
rel_count = bu32()
base_count = bu32()
ref_count = bu32()
pad(12)
^that's what you'll actually see in my DAT script for 3x ;)
(alot simpler than what's used in 2x)


plus, I need Pichu's data for my own personnal usage XD

if you'd like to see some proof of some current progress,
you can take a look at this:
http://gist.github.com/2583038
^this is Pichu's structures as returned from the relocation table.
as you can tell (if you can understand it), not everything is supported.
I hope to get back with Revel8n and fix some (if not all) of those undefined structures.
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
Problem is, .obj doesn't allow for weighting data. You might want to aim for a different format that can save the armature and weighting, like .dae or .md5mesh. Otherwise, the rigging will still be a guess and not what you see in Melee.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
if it makes you feel any better, I've already gotten Pichu's bone structure :)
0
| 1
| | 2
| | | 3
| | | | 4
| | | | | 5
| | | | | | 6
| | | | | | 7
| | | | | | | 8
| | | | | | | | 9
| | | | | | | | | 10
| | | | | | | | | | 11
| | | | | | | | | | | 12
| | | | | | | | | | | 13
| | | | | | | 14
| | | | | | 15
| | | | | | | 16
| | | | | | | 17
| | | | | | | 18
| | | | | | | | 19
| | | | | | | 20
| | | | | | | 21
| | | | | | | | 22
| | | | | | 23
| | | | | | | 24
| | | | | | | | 25
| | | | | | | | | 26
| | | | | | | | | | 27
| | | | | | | | | | | 28
| | | | | | | | | | | 29
| | | | | | | 30
| | | | | 31
| | | | | | 32
| | | | | | | 33
| | | | | | | | 34
| | | | | | | | | 35
| | | | | | | | | | 36
| | | | | 37
| | | | | | 38
| | | | | | | 39
| | | | | | | | 40
| | | | | | | | | 41
| | | | | | | | | | 42
| | | | | 43
| | | | 44
| 45

^the bones are logged by their ID's as they have no names

I'm still working on the mesh data as the script seems to be returning an invalid index...

if anyone wants to see if they can help fix my script, here's the code:
Code:
def ImportMdl():
    #--- header ---
    #(don't touch unless you know what you're doing)
    from COMMON import (Switch,switch,Case,case,
    u8,u16,u24,u32,u64,s8,s16,s24,s32,s64,f32,f64,h8,h16,h24,h32,h64,u_,s_,f_,h_,
    bu8,bu16,bu24,bu32,bu64,bs8,bs16,bs24,bs32,bs64,bf32,bf64,bh8,bh16,bh24,bh32,bh64,bu_,bs_,bf_,bh_,
    Skip,skip,pad,Jump,jump,BF,Mtx,SqMtxInv,StructArr,String,string,
    SetScene,SetObject,SetBone,SetPrimitive,SetFacepoint,SetWeight,
    IncreaseRangeFor,DecreaseRangeFor,IWLD,ResetIWLD,IFLD,ResetIFLD)
    #--- /header ---
 
    def str_off(offset):
        STRING=(hex(offset).replace('0x','')).upper()
        return '0'*(8-len(STRING))+STRING
    def Bone_DAT(offset): #jobj
        #print 'bone: '+str_off(offset)
        p=Jump(offset)
 
        unk1 = bu32()
        Flags = bu32()
        skip(12) #map data
        R = [bf32(),bf32(),bf32()]
        S = [bf32(),bf32(),bf32()]
        L = [bf32(),bf32(),bf32()]
        inverse = bu32()+32
        unk2 = bu32()
        if inverse>32: Jump(inverse)
        mtx=[
        bf32(),bf32(),bf32(),bf32(),
        bf32(),bf32(),bf32(),bf32(),
        bf32(),bf32(),bf32(),bf32(),
        0,0,0,1]
 
        Jump(p)
        return SqMtxInv(4,mtx),L+R+S,Flags
    def Object_DAT(offset): #pobj
        #print 'obj: '+str_off(offset)
 
        Jump(offset)
        name='obj'+str_off(offset)
 
        unk = bu32()
        Next = bu32()+32
        attrs = bu32()+32
        flags = bu16()
        DL_size = bu16()*32
        DL_data = bu32()+32
        weights = bu32()+32
        SetObject( name, ParentName='joint_obj') #create a new object
 
        def getWeights(WOs):
            def Format(MW): Jump(MWO[0],32); return [Bone_DAT(MW[0]+32)[0],MW[1]]
            Jump(WOs); return [[Format(MW) for MW in StructArr(['bu32','bf32'])] for MWO in StructArr(['bu32'])]
 
        def getAttrs(AO): Jump(AO); return StructArr(['bu32','bu32','bu32','bu32','bu8','bu8','bu16','bu32'],[255,'*','*','*','*','*','*','*'])
 
        #[ [[Mtx,Wght],[Mtx,Wght]] ,[...],[...]] #TODO: [Name,Mtx,Wght] <- for setting the vert-weight values per facepoint
        weights_list=(getWeights(weights) if weights>32 else [])
 
        #[[CPL_idx,CPL_Type,has_bnd,dtype,exponent,unk,stride,offset],[...],[...]]
        Attributes=getAttrs(attrs)
 
        def geometry(Attributes=Attributes): #global Attributes -> (Traceback: global name 'Attributes' not defined)
            global length;length=0
            def CPT(i): #face-point index/value formats
                global length; length+=[0,1,1,2][i]
                if i == 0: return '' #null
                if i == 1: return bu8() #direct data
                if i == 2: return bu8() #8bit index
                if i == 3: return bu16() #16bit index
            def vector(D_Type, exponent, offset, IS3D): 
                def DataType(DT):
                    if DT==0: return bu8()/pow(2.0,exponent) #8bit unsigned pseudo-float
                    if DT==1: return bs8()/pow(2.0,exponent) #8bit signed pseudo-float
                    if DT==2: return bu16()/pow(2.0,exponent) #16bit unsigned pseudo-float
                    if DT==3: return bs16()/pow(2.0,exponent) #16bit signed pseudo-float
                    if DT==4: return bf32() #32bit float
                j=Jump(offset,32); return [DataType(D_Type),DataType(D_Type)]+([DataType(D_Type)] if IS3D else [])
                Jump(j)
            def transform(V,MWs):
                tx,ty,tz = 0,0,0
                for MW in MWs: #[Matrix,Weight]
                    tx += ((V[0]*MW[0][0]) + (V[1]*MW[0][1]) + (V[2]*MW[0][2])  + MW[0][3])
                    ty += ((V[0]*MW[0][4]) + (V[1]*MW[0][5]) + (V[2]*MW[0][6])  + MW[0][7])
                    tz += ((V[0]*MW[0][8]) + (V[1]*MW[0][9]) + (V[2]*MW[0][10]) + MW[0][11])
                return [tx-V[0],ty-V[1],tz-V[2]] #[X,Y,Z]
            count=bu16()
            while count>0:
                mtcs = []; V,N,C,U='','',['',''],['','','','','','','','']
                for attr in Attributes:
                    def Get(IS3D): return vector(attr[3], attr[4], attr[7]+(CPT(attr[1])*attr[6]), IS3D)
 
                    Switch(attr[0])
                    if   Case( 0): mtcs = weights_list[CPT(attr[1])/3] #vert/nor_mtx (random invalid index)
                    elif Case( 1): CPT(attr[1]) #uv[0]_mtx (unknown processing)
                    elif Case( 2): CPT(attr[1]) #uv[1]_mtx
                    elif Case( 3): CPT(attr[1]) #uv[2]_mtx
                    elif Case( 4): CPT(attr[1]) #uv[3]_mtx
                    elif Case( 5): CPT(attr[1]) #uv[4]_mtx
                    elif Case( 6): CPT(attr[1]) #uv[5]_mtx
                    elif Case( 7): CPT(attr[1]) #uv[6]_mtx
                    elif Case( 8): CPT(attr[1]) #uv[7]_mtx
                    elif Case( 9): V=('' if CPT(attr[1])=='' else transform(Get(1),mtcs)) #vert
                    elif Case(10): N=('' if CPT(attr[1])=='' else transform(Get(1),mtcs)) #normal
                    elif Case(11): CPT(attr[1]) #color[0] #vertex colors
                    elif Case(12): CPT(attr[1]) #color[1]
                    elif Case(13): U[0]=('' if CPT(attr[1])=='' else Get(0)) #UV0
                    elif Case(14): U[1]=('' if CPT(attr[1])=='' else Get(0)) #UV1
                    elif Case(15): U[2]=('' if CPT(attr[1])=='' else Get(0)) #UV2
                    elif Case(16): U[3]=('' if CPT(attr[1])=='' else Get(0)) #UV3
                    elif Case(17): U[4]=('' if CPT(attr[1])=='' else Get(0)) #UV4
                    elif Case(18): U[5]=('' if CPT(attr[1])=='' else Get(0)) #UV5
                    elif Case(19): U[6]=('' if CPT(attr[1])=='' else Get(0)) #UV6
                    elif Case(20): U[7]=('' if CPT(attr[1])=='' else Get(0)) #UV7
                    elif Case(21): CPT(attr[1]) #vert_mtx_arr
                    elif Case(22): CPT(attr[1]) #normal_mtx_arr
                    elif Case(23): CPT(attr[1]) #uv_mtx_arr
                    elif Case(24): CPT(attr[1]) #light_mtx_array
                    elif Case(25): CPT(attr[1]) #NBT (NX,NY,NZ, BX,BY,BZ, TX,TY,TZ)
                    elif Case(25): pass #CP_NULL
                    count-=1
                SetFacepoint(V,N,tuple(C),tuple(U))
                #SetWeight(Bone,Weight) #TODO (use in FOR loop)
 
            return length+3
 
        Jump(DL_data)
        while DL_size>0:
 
            Switch(bh8()) #primitive ID
            if   Case('80'): t='quads'
            elif Case('88'): t='quadstrip' #possible support based on pattern (hasn't actually been seen)
            elif Case('90'): t='triangles'
            elif Case('98'): t='trianglestrip'
            elif Case('A0'): t='trianglefan'
            elif Case('A8'): t='lines'
            elif Case('B0'): t='linestrip'
            elif Case('B8'): t='points'
            SetPrimitive(t)
            DL_size-=geometry()
        if Next>32: Object_DAT(Next)
    def Data_MAP(offset): #dobj
        Jump(offset)
 
        unk = bu32()
        Next = bu32()+32
        Material = bu32()+32
        Object = bu32()+32
        if Next>32: Data_MAP(Next)
        #if Material>32: Material_MAP(Material)
        if Object>32: Object_DAT(Object)
 
    def Bone_MAP(offset, parent=''): #jobj
        Jump(offset)
        name='bn'+str_off(offset)
 
        skip(8) #bone data 1
        Child = bu32()+32
        Next = bu32()+32
        Data = bu32()+32
        skip(44) #bone data 2
        MTX,LRS,Flags = Bone_DAT(offset)
        SetObject('joint_obj') #active object being the rig object
        SetBone(name,0,LRS,MTX,parent)
 
        if Child>32: Bone_MAP(Child,name)
        if Next>32: Bone_MAP(Next,parent)
        if Data>32: Data_MAP(Data)
    #main header:
    block_size = bu32()
    offset_tbl = bu32()+32
    num_offsets = bu32()
    num_bases = bu32()
    num_refs = bu32()
    tmp1 = bu32() #001B?
    unk1 = bu32()
    unk2 = bu32()
    #get the base offsets:
    bases = []
    current_base = 0
    Jump(offset_tbl+(num_offsets*4)+(current_base*8))
    def base_name(offset):
        last=Jump(offset_tbl+(num_offsets*4)+((num_bases+num_refs)*8)+offset); return String()
        jump(last)
    while IWLD(current_base) < num_bases:
        bases.append([bu32(),base_name(bu32())])
        current_base += 1
    ResetIWLD()
 
    for base in bases:
        if (base[1]).split('_')[2] == 'joint': SetObject('joint_obj',24); Bone_MAP(base[0]+32)
yeh, I'm only using obj for export purposes...
(just to make sure the model works)
I'll use dae for bones.
(I'll have to write an xml handler for my program)
 

Steelia

Smash Champion
Joined
Sep 23, 2007
Messages
2,523
Location
Home.
So this is where you've been hiding out eh? Still all the same complicated stuff... I haven't learned much, other than how to move verts in blender from that one guide you made about 2 years ago. x_X

Hope you're having much better luck with this one (=? I'm really interested in seeing any possible progress on SSBM .dat character models.~
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
Hope you're having much better luck with this one (=? I'm really interested in seeing any possible progress on SSBM .dat character models.~
as a matter of fact I am :bee:
but I still need some help :/

I've managed to duplicate my very best previous results.
see here:
http://forums.kc-mm.com/index.php?topic=27625.0

sry I havn't been on,
the network connection I was connected to no longer exists and the rest are locked

on a side note, I'm using a better dino compy
(Pentium 3 @ 800MHz with 1GB RAM)
and have installed WinXP Black
(the world's best OS) <3<3<3
 

Toomai

Smash Ace
Joined
Aug 17, 2006
Messages
769
Location
Someplace in Canada
Don't yet know enough real technical stuff to help with this, but I decided to go through that bone tree you have and attach hitboxes and hurtboxes to it. Names use Brawl's format for easier understanding and are hopefully close enough.
TopN
| TransN
| | XRotN
| | | YRotN
| | | | HipN
| | | | | WaistN
| | | | | | 6
| | | | | | 7
| | | | | | | LShoulderN
| | | | | | | | LShoulderJ
| | | | | | | | | LArmJ
| | | | | | | | | | LHandN
| | | | | | | | | | | LFingersNa
| | | | | | | | | | | LFingersNb
| | | | | | | 14
| | | | | | NeckN
| | | | | | | HeadN
| | | | | | | 17
| | | | | | | LEarN
| | | | | | | | LEarNb
| | | | | | | 20
| | | | | | | REarN
| | | | | | | | REarNb
| | | | | | 23
| | | | | | | RShoulderN
| | | | | | | | RShoulderJ
| | | | | | | | | RArmJ
| | | | | | | | | | RHandN
| | | | | | | | | | | RFingersNa
| | | | | | | | | | | RFingersNb
| | | | | | | 30
| | | | | 31
| | | | | | 32
| | | | | | | LLegJ
| | | | | | | | LKNeeJ
| | | | | | | | | LFoot
| | | | | | | | | | LToe
| | | | | 37
| | | | | | 38
| | | | | | | RLegJ
| | | | | | | | RKneeJ
| | | | | | | | | RFoot
| | | | | | | | | | RToe
| | | | | TailN
| | | | 44
| ThrowN
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
Don't yet know enough real technical stuff to help with this, but I decided to go through that bone tree you have and attach hitboxes and hurtboxes to it. Names use Brawl's format for easier understanding and are hopefully close enough.
TopN
| TransN
| | XRotN
| | | YRotN
| | | | HipN
| | | | | WaistN
| | | | | | 6
| | | | | | 7
| | | | | | | LShoulderN
| | | | | | | | LShoulderJ
| | | | | | | | | LArmJ
| | | | | | | | | | LHandN
| | | | | | | | | | | LFingersNa
| | | | | | | | | | | LFingersNb
| | | | | | | 14
| | | | | | NeckN
| | | | | | | HeadN
| | | | | | | 17
| | | | | | | LEarN
| | | | | | | | LEarNb
| | | | | | | 20
| | | | | | | REarN
| | | | | | | | REarNb
| | | | | | 23
| | | | | | | RShoulderN
| | | | | | | | RShoulderJ
| | | | | | | | | RArmJ
| | | | | | | | | | RHandN
| | | | | | | | | | | RFingersNa
| | | | | | | | | | | RFingersNb
| | | | | | | 30
| | | | | 31
| | | | | | 32
| | | | | | | LLegJ
| | | | | | | | LKNeeJ
| | | | | | | | | LFoot
| | | | | | | | | | LToe
| | | | | 37
| | | | | | 38
| | | | | | | RLegJ
| | | | | | | | RKneeJ
| | | | | | | | | RFoot
| | | | | | | | | | RToe
| | | | | TailN
| | | | 44
| ThrowN
nice job!
that actually looks amazingly accurate =D
(I'm hyped because it's Pichu) lol

anyways, I've got quite a bit of progress of my own :D
see here: http://forums.kc-mm.com/index.php?topic=27625.msg927181#msg927181

I've still got a bit to do, but this should hopefully get things started ^_^

I've still got quite a bit to learn about OpenGL though...
think you can help out with that toomai?? =D

anyways... hopefully I can get alot more progress ^_^
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
It looks like you're almost there. All that's left is, if it's not already there, UV and bone weight information before I'd consider it usable.

Can't believe it's really taken this long to get Melee models extracted, but the finish line seems near... :3
 

Milun

Smash Ace
Joined
Oct 29, 2009
Messages
516
Location
Australia
Wow, it's been a while. You've really gotten far in this! Makes my converter look even worse now... oh well. I'm just happy to see you succeeding.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
It looks like you're almost there. All that's left is, if it's not already there, UV and bone weight information before I'd consider it usable.

Can't believe it's really taken this long to get Melee models extracted, but the finish line seems near... :3
lol the internal data structures in UMC actually support the slots for UV's and weights. :3

UV's are pointless atm because I'm not supporting materials/textures yet...
(don't know enough about OpenGL and GL_ARB to support them)

as for weights,
I just need to work on the function to append the weights.
(I have the function layout and everything, but laziness is my problem) :p

Wow, it's been a while. You've really gotten far in this! Makes my converter look even worse now... oh well. I'm just happy to see you succeeding.
lol thanx :)
glad to get a reply :D

you should work on your converter as well. ;)
my converter only works with 'joint' models. >.<
at least you support stage data.

I can share my OpenGL knowledge with you if you like :)
(PyOpenGL is just like OpenGL in C) =D
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well... I'm stuck on something >_>


IF anyone has any ideas as to the problem, please say something :)

what I'm doing is any script that uses the Header() function will append it's info to an internal var.
the problem is Header() isn't initializing for all the plugins for whatever reason <_<
 
Last edited:

Milun

Smash Ace
Joined
Oct 29, 2009
Messages
516
Location
Australia
you should work on your converter as well. ;)
my converter only works with 'joint' models. >.<
at least you support stage data.

I can share my OpenGL knowledge with you if you like :)
(PyOpenGL is just like OpenGL in C) =D
No thanks, I'm good. My converter so far is Craptastic™. But that aside, have you by chance figured out how Texture UV's work?
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
No thanks, I'm good. My converter so far is Craptastic™. But that aside, have you by chance figured out how Texture UV's work?
awww >_<
you shouldn't quit just cause it sux.
I didn't :awesome:

I even posted my script on the melee hacking thread.


anyways...
UV's...
I havn't even gotton textures to work in OpenGL let alone my converter :urg:

but for what I have gotten:
weighted bones:









file handling and script selection:




^ lol, was about to open paint before I captured the screen XD


I'm currently working on basic MDL0 importing...
exporting is always obj for now >_>
(I'll reprogram it later)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well what I did to get that was:

Mtx = ( Parent_Mtx * Bone_Mtx )
if child: _Bone(Mtx) #send the current matrix as the parent matrix for the child :p

if you know how to better this, plz tell :3
cause I sure as heck don't XDD

honestly, I'm only just getting into transformations... >_>


anyways...
I've sent my code to Revel8n for further fixing...
... if you'd like it as well, you can get the current code here:
http://tcll5850.hostoi.com/UMC30a.zip

I'll be creating a new google project once I get a legit GUI >_>
(I just got PyCEGUI, so it shouldn't be too long before I do) ;)
 

Steelia

Smash Champion
Joined
Sep 23, 2007
Messages
2,523
Location
Home.
Quick question about your UMC...

I've been trying to do some editing with Fox's mic, but I have no clue how to export the file so that I can insert it back into Melee. Is it possible to somehow convert the OBJ file into a DAT file or something, or make it so I can reconvert it back from OBJ to DAT? X:
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
as of now... no

the DAT file exceeds my ability to understand it's data structure >_<
(especially in the relocation table area)

of course though I do intend to rebuild DAT files for use in Melee...
but even Melee's data structure itself confuses me... @_@
 

Steelia

Smash Champion
Joined
Sep 23, 2007
Messages
2,523
Location
Home.
I could imagine, this kind of stuff still goes way over my head. :p

In any case, I've been using an older version of your program (v2.6), and so far it's been able to pump out .OBJ files of all characters I've tested so far . . . except for Samus. (And Ganondorf.) Are you aware of that, or are certain characters just not compatible with UMC yet ?:
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
I could imagine, this kind of stuff still goes way over my head. :p

In any case, I've been using an older version of your program (v2.6), and so far it's been able to pump out .OBJ files of all characters I've tested so far . . . except for Samus. (And Ganondorf.) Are you aware of that, or are certain characters just not compatible with UMC yet ?:
yea I'm aware -.-
2.6d was built using what little knowledge I actually had...

there were alot of attributes that weren't supported...
(heh CaptFalcon, I can tell you, won't convert as of the color attributes)

3x supports alot more and can pump out an obj of even GigaBowser :3

for those who want my horribly unfinished, very buggy, but working program of 3x,
you can get it here:
http://tcll5850.hostoi.com/UMC30a.zip
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
So... how do you use this? I don't see any executable, nor do I see any readme with that information in it.

Yeah, I'm still after good dumps of the Wireframe's models... figured out their code was 'PLBo' and 'PLGl' (shortening the name to -2- letters? WTF?!), and have extracted all the .dat files for those two characters (three each, it seems).
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
So... how do you use this? I don't see any executable, nor do I see any readme with that information in it.

Yeah, I'm still after good dumps of the Wireframe's models... figured out their code was 'PLBo' and 'PLGl' (shortening the name to -2- letters? WTF?!), and have extracted all the .dat files for those two characters (three each, it seems).
oh yea...
Boy and Girl

are those causing errors for you or something??

...
herp derp >_<


to use my current UMC
- run API.py (must have Python installed)
...Python installation won't be needed by first actual release ;)
- select your dat file (Melee/TOV filter doesn't matter here)
- type in 0 in the console (Melee)
- wait for conversion to finish (exports OBJ only atm)
(freezing is impossible in this build)
 

Steelia

Smash Champion
Joined
Sep 23, 2007
Messages
2,523
Location
Home.
- wait for conversion to finish (exports OBJ only atm)
(freezing is impossible in this build)
It can take a really long time sometimes, though. :b But I'd say it's worth the wait to find certain model parts, at the very least.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
It can take a really long time sometimes, though. :b But I'd say it's worth the wait to find certain model parts, at the very least.
93 seconds for PlPcNr :p

btw, if anyone with knowledge in C++ and Py would like to help,
I'm working on rewriting Nintendo's SDK in Python.

I must ask though that you try not to use classes.

UMC is entirely done through functional programming.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
I've got some info

this shows the main process of UMC

libraries actually work now ;)
meaning you can set a library to do all of the dirty work for you...
(I'm working on the revolution library which will allow you to program scripts as if you were using the Dolphin SDK)

the code is imported directly instead of through a named var...
meaning variables and functions are accessed directly instead of 'module.function'

only problem is you have to re-import COMMON after the header...
I'll fix that later ;)
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
Yep. Getting an error.

I downloaded 2.7.3 for 64-bit systems, and it's giving a "null function error". This is even before I can select a .dat file.

Now what?
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
Well, I killed the 64-bit install, and went with 32-bit... NOW it works.

Only question is which file do I open?

There are three:

PlBo.dat (Size: 85KB)
PlBoAJ.dat (Size: 1,438KB)
PlBoNr.dat (Size: 78KB)

I wager that the AJ, being the largest, would have the model data. Am I incorrect?
 

TheAmazingSnivy

Smash Rookie
Joined
Feb 24, 2012
Messages
15
Location
Fiery Fields of Doom
Well, I killed the 64-bit install, and went with 32-bit... NOW it works.

Only question is which file do I open?

There are three:

PlBo.dat (Size: 85KB)
PlBoAJ.dat (Size: 1,438KB)
PlBoNr.dat (Size: 78KB)

I wager that the AJ, being the largest, would have the model data. Am I incorrect?
You are incorrect, you would open the NR file.
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
Alright. Well, I did eventually figure that out, but the results were... ugly. It at least converted something... enough to import to Blender and find that:

- Normals were inverted
- UVs were flipped vertically

These are both simple fixes, but probably should be looked at anyway.
 

TheAmazingSnivy

Smash Rookie
Joined
Feb 24, 2012
Messages
15
Location
Fiery Fields of Doom
I feel like I should tell you what I know so far about the .dat files in Melee.
Pl**Aj files are animations;
Pl**Nr files are models;
Pl** files are common data.
Just a quick explanation
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
yay I can finally view this forum =D

yea...
the transforms work on verts as well as normals...
that's why everything's currently a mess... >_>

as for the acronyms used:
Pl - player
Ty - Trophy

(I don't have time to type them all out now)
Cl - CLink - Young Link
Kp - Koopa - Bowser
Lk - Link
Fe - Fire Emblem - Roy
Pn - Purin - Jigglypuff
...


Nr - Normal
Bu - Blue
Bk - Black

Aj - animations


the Pl*charname*.dat files are the logic data files
(Brawl hackers call them PSA files)

EDIT:
btw, I've released another dev version of my converter if anyones interested:
http://forums.kc-mm.com/index.php?topic=27625.0
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
Any news on this? Feels like you're the only one working on cracking Melee's format anymore, and I really want to see it happen.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
I'm not really posting any updates here anymore...
(issues preventing me from accessing the forums is why)

I can access KC-MM much more than here so any updates posted will be over there in my program box ;)

but for info relating to my program...
I'm getting close to a dev4 release. :smirk:
what's so great about it?
speed and performance + programming issues being resolved

I also hope to have a few libraries started upon dev4's release ;)
(I've explained what libs are in dev4's info, but they're pretty easy to understand w/o reading) XD

I hope to work on the revolution library relatively soon...
(not neccesarily by dev4)

this will allow any nintendo format to be easily read from and converted.
(which dates from N64 models to Wii-U models)

I already have Nintendo's latest SDK (for the Wii-U) and I can tell you they have some good surprizes in store ;)


so yea...
I'm not just working on melee anymore! :D
even though I am the only one =3=

Revel8n does help me out, but only with his knowledge and past progress through email... >_>

but anyways...
stay updated ;)
I have much more to deliver :)
 

E-scope12

Smash Apprentice
Joined
Oct 19, 2011
Messages
144
Can you add support for pokemon Battle Revolution 3d Models textures bones UV's animations too?
 
Top Bottom