• 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 - Side Development Thread

left or right? (a 20x20 toggle at the top of the window)

  • Left (under the window icon)

    Votes: 23 53.5%
  • Right (under the X button)

    Votes: 20 46.5%

  • Total voters
    43
  • Poll closed .

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
Well, at first, it griped about not having 'numpy', but I found and installed that, and then moved 'pygame' to the system's Python install, and then it finally opened.

Tested it with PlBoNr.dat, and it imported perfectly. I see all the bones, and even exported it.

One thing to note, though... the .obj export comes in as having every normal flipped when imported into Blender. I'm not sure what can be done to correct that in the export itself (but it's nothing a quick Ctrl-A, Ctrl-W, 0 in Edit mode can't fix).

Seriously, if you can get the weighting information and ability to export to a format that preserves it (would sending examples of a format help you?), this would be the Melee model solution.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
internally, weights already exist. :)
I just need to get them into a format that supports them.

as for blender...
the OBJ importer ignores normals
(in both 24x and 26x)

I'd like to build the DAE format, but I can't think about it w/o thinking about the library I need to build for it... :/

the 3DS format would work though >_>
and Blender supports that...
though I don't think it has it WELL supported...

I'm trying to work on MDL0, both import and export... but still...


if you'd like to work on a script, UMC's functions make it very easy to work on. ;)

I don't reccomend using classes,
but you can use them if you like. :p

I reccomend just keepng it at a function level yo keep things simple. :)

I know I havn't provided a function list...
I think dev4 has one, though it doesn't have the matrix functions...
(I'll put those down when I can) :)

I'll have a descriptive function list by the actual release ;)
(both COMMON and FORMAT)

COMMON is basically the file manager that supplies all those data handling functions.
(most of them should be described in COMMON.py)

FORMAT supplies the functions that interface the file data with UMC.
(unfortunatly these aren't documented, but the input variables are named according to the data they accept) :)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
oh...
as for the system python...
that shouldn't be happening... O.o

I'm gonna have to find out why it's doing that... :/

and I didn't think I've used NumPy...
welp... there's another thing to include... heh...
thanx :)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just renamed my local python installation...

that's where the problem was...
it's not supposed to be referencing from C:/Python27

can someone send me a portable python 2.7.5 x64 installation plox :)
EDIT: included with NumPy, Pygame, PyQt, and PyOpenGL (Accelerate if possible) x64 build

an x64 build of GLEWpy would also be nice :)
(for dev5)
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
Well, unfortunately, I'm no good at code...

But I was hoping if you had enough example files, you could add MD5 or PSK export capabilities (MD5 would be preferred, as that's what BRRES Viewer puts out).
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
MD5 is quite common... but I don't have anything to test the exports with :/

also... I'm about to make an update here soon...
I'm forcing x86 mode as I need an x64 PPy2751 interpreter...
(I can't install it, so I need someone to send me a zip or something of their installation on DB)

modules needed: (don't install everything with it)
- NumPy + SciPy
- PyGame
- PyOpenGL (Accelerate if possible) x64 (not included with PPy2751 installer)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
ok sure :)
I'm currently reinstalling windows atm, so I can get off this god-forsaken wii which website developers refuse to acknowledge...

shouldn't take me but 3 days to reinstall some 800 programs I have :p

lol I should be up and running again (and then some) here real soon. ;)

EDIT:
welp... nvm that... >_<
my compy decided to kick itself and ruin the OS at the last minute of installation.

so right now I currently have no compy -.-*

well, I have my backup, but that requires me to lift up my bed to get it...

I got my beast working anyways, so I need to do a reinstall just to get that thing up and running >:3
problem is, I have no windows installation disk :(

my "beast"'s specs:

MBd:
CPU:
- Intel Celeron single-core x86 2.6GHz

1 AGP graphix slot:
- 3D Prophet II GTS Pro 64MB (512MB total RAM)

5 PCI slots:
- Linksys W/less G
- Voyetra Turtle Beatch Rivera (surround sound with digital and game ports)
- blank
- blank
- 6 USB ports

3 RAM slots: 1GB*3

yes, it's not exactly a "beast" compaired to builds nowadays...
but it's the first MBd that fully fills my huge tower (5 HDDs + 4 CDDs)


best part:
it's all trash XDD
(I didn't pay for any of it)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well... that MBd in my last post was a dud >_<
(it is not my friend and broke one of my lights)
^ it kep'd crashing and burning over countless attempts to get it working

it did have a blown wire on the back of the MBd which prevented it from even getting to the boot screen, but I fixed that...

now I'm back to using my ols 3 PCI and 2 RAM MBd with IntelGFX...
but it works, so I'm not complaining...
other than it's slow as ballz -.-

it was running faster before I reinstalled,
but I'm not sure what I did to make it faster >_>

EDIT: installed my other RAM sticks, and NOW it's running much faster.
looks like EDGE just doesn't have it when it comes to RAM :p
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
I could fix that up easilly as a blender I/O script... :)
(or is it import only??)

thanx ;)

EDIT:
oh ok, it's a blender24 script
easy enough to add...

I'll see what I can do for a dev4.5 exporter ;D
text format like obj, it should be easy :)

EDIT2:
ok, to make the script import into blender24, simply add this to the script:
-------------------------------------------------------------------------

######################################################
# Importing modules
######################################################
"""
Name: 'MD5* importer (.MD5mesh/MD5anim)...'
Blender: 241
Group: 'Import'
Tooltip: 'Imports a MD5mesh and MD5anim file.'
"""
__author__ = 'Thomas "der_ton" Hutter'
__url__ = ()
__version__ = "0.6 2008-05-31"

import Blender


-------------------------------------------------------------------------

EDIT3: nvm... doesn't work >.>
shoulda tested before posting... heh :p

EDIT4:
ok the first line of the file:
#!BPY

and make sure the script's filename has no special characters
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
oh... it is a blender26 importer :o

just imported a mesh, no objects showed in the view, but the data was there.
saved -> closed -> opened... still not there

opened in 26, and everything was there.

well anyways... it imports in 24 none the less, so it's usable...
just not pretty :p

EDIT:
bone import is horrible...
it uses the linear standard of binding to an axis...
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
Yeah, I didn't say it was pretty, just functional.

And yes, it only works in 2.4x.

But if that actually works to add it to the import menu...
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
ok... the MD5 format is easy...
but I need to make ANOTHER update to the string() function 9_9
(meaning thank you for finding this)

for example:
mesh {
data
data
data
data}



type = "mesh" #from above
if type == "mesh":
....mesh_data = string( [], start="{", stop="}", recursive=True )


which will basically return:
[ '', 'data', 'data', 'data', 'data' ]

note: that var "recursive" will be True by default.
it's basically for data such as:
{
....{
........{ }
....}
}

where False stops at the firt occurence of the stop character...
example: (what's in green is returned)
True:
{
....{
........{ }
....}
}

False:
{
....{
........{ }
....}
}
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well... while I'm editing COMMON, I may as well note another update...
C programmers will like the use of this:

any COMMON function with a 'p' in front doesn't manage the offset.
it's usage is to simply test a specific value at that offset.

such as:
if pstring() == "mesh": setObject( string() )

or even:
if pbu8() == 0x98: ...

the 'p' stands for 'pre' as in 'pre-read'.
so you know what you're reading before you actually read it. ;)
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
ok... the MD5 format is easy...
[snip]

Easy enough to get an export script working, I hope.

Either that or import the .ses (if it contains the weighting/joint information) to Blender...
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
meh... MD5 is easier...
SES was designed to allow for VERY large internal format changes between versions...

dev5 will use SESv2 where dev4 uses SESv1, a flawed design.

v1 and v2 will be nothing alike, other than the base list: [version, data]
in v1, data is used as-is, a RAW list containing the model/bone info as objects in scenes.
where as in v2, data is a subset of memory mappings that needs to be rebuilt before it can be used.

most other model formats weren't built for such drastic changes as what this one requires. ;)
however, there are those few out there that were...
(.blend is one of them)

SES has to do everything BLEND can do...
only exception is SES is a little more portable than BLEND, as it's in ASCII...
though I do intend to add binary support to decrease the size for LARGE amounts of data.
(where ASCII fails)
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
That, I don't mind. All I'm concerned about is getting the meshes with bones and weighting into Blender.

I've got plans for them, and I really don't like having to guess at weightings. Always prefer the actual weights when possible.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
and I really don't like having to guess at weightings. Always prefer the actual weights when possible.
the reason I scrapped my Pachirisu project in Blender, right there. XDD

started applying the weights using a log, but never got finished...
that's something the computer needs to do, not me. XD

yea, UMC will do that once the proper scripts are built.

it's the matter of building the scripts,
or more like building the PROPER functions for building them that's taking the painstakingly long process >_<
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
[snip]
it's the matter of building the scripts,
or more like building the PROPER functions for building them that's taking the painstakingly long process >_<

Oh... see, the way I'd read your other posts, it sounded like all that needed to be done was to read the weights and write them into the export format.

Anyway, if you're familiar with TMR, you'll probably see UMC used for a Melee project once the MD5 exporter is available.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well...
all that needs to be done is writing the weights to the export format...
however, the current functions would require me to make the script extremely complex just to write the file...
(the string function isn't a parser right now... it just reads/writes a string in the file)

it can return the lines from a file as a list, but not much other than that...
giving it the ability to parse will make alot of the complex work extremely simple.

besides...
I need a parser for cpp files or js files anyways...
(it's for a future version of UMC before it's renamed to UGC)

and TMR??
I may know it, but not from the acro :p

believe me though...
UMC is a highly complex interface designed for noobs who want to make it support more.
(like back when I came out with my crappy scripts for blender/Melee vertexing method)
^ and yes they are crappy, I havn't been able to work on them due to fixes and new concepts for dev4.5 and dev5
(I'm getting dev5's API update system working with my server)

and then the fact of restoring my compy... heh
I've got skype now, but I can't use it until I clear up the pile of mixed up processes and set them strait...
(I mean until I improve the performance of my compy)

it's only a 2.6GHz single-core CPU, so I can only get so much out of it...
however I'm doing better than most modern systems... heh
(apply my clean setup to anyone else's dirty setups) :p
^ for example IE8 runs quite fast on my system

EDIT:
you know... that recursive setting...
I think I'm actually going to default that as False...
(thinking of HexEdit templates and how it reads strings)
 

Tcll

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

that update to the same version was juust a test :p

if update >= current:

EDIT:
the "version: 0" in the image is actually a bug...
fixed that already, not it's "version: 0.0001"

it's the version of API.py
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
updated the kc-mm poll...
should I advance the API sub-system to using a directory instead of being single file??

if so, "data" will be renamed to "plugins", and FILE, FORMAT, and COMMON will be moved to API/
the update system will also need changing...
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
ok... I've removed the goto module cause I've just figured out, that thing actually slows things down by alot >.>
(load times were at least 3 times slower)
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
My vote goes to whatever will get an MD5/PSK(/even DAE, if it allows for Blender to import it) exporter working soonest, heh.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
yea, but I'm kinda talking about 2 versions of UMC...

the vote goes to the MD5 ;)
I'm using the blender script to write the UMC script.

things aren't going too well though...
looks like things are a bit more complex than I thought >_>

but I'll figure it out :)

MD5 will be released by the next update, with both I/O support.
(animations will come with dev5)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
made an update to case() to allow for multiple values: case(1, 2, 3)
or for MD5:
if case('numJoints', 'numbones'):

it needed to be done anyways... :p

EDIT:
also I forgot to mention, I've re-added temp file support, and improved the logger:
Universal Model Converter - Session Log


-- importing Pachirisu.md5mesh --

0x0000000000: read raw string 'MD5Version' stopping at ' '
0x000000000B: read raw string '10
' stopping at '\n'
0x000000000F: read raw string 'commandline' stopping at ' '
0x000000001B: read raw string '""
' stopping at '\n'
0x000000001F: read raw string '

numJoints' stopping at ' '
0x000000002B: read raw string '19
' stopping at '\n'
0x000000002F: read raw string 'numMeshes' stopping at ' '
0x0000000039: read raw string '3
' stopping at '\n'
0x000000003C: read raw string '

joints' stopping at ' '
0x0000000045: read raw string '

"Pachirisu" -1 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )

"Origin" 0 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )

"Waist" 1 ( 0.126114 0.000000 0.397004 ) ( -0.707107 0.000000 0.000000 )

"LThigh" 2 ( 0.068227 0.285930 0.397052 ) ( 0.000000 1.000000 0.000000 )

"LFoot" 3 ( 0.068227 0.285930 0.125448 ) ( 0.000000 1.000000 0.000000 )

"RThigh" 2 ( 0.068227 -0.285930 0.397052 ) ( 0.000000 0.000000 0.000000 )

"RFoot" 5 ( 0.068227 -0.285930 0.125448 ) ( 0.000000 0.000000 0.000000 )

"Spine" 2 ( 0.126114 0.000000 0.639819 ) ( -0.707107 0.000000 0.000000 )

"Head" 7 ( 0.126114 0.000000 1.099892 ) ( 0.000000 0.000000 0.000000 )

"LEar" 8 ( 0.090657 0.433147 2.319344 ) ( -0.694692 0.000000 0.000000 )

"REar" 8 ( 0.090657 -0.433147 2.319349 ) ( 0.000000 -0.719307 0.694692 )

"LArm" 7 ( 0.212077 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )

"LHand" 11 ( 0.492319 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )

"RArm" 7 ( 0.212077 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )

"RHand" 13 ( 0.492319 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )

"Tail1" 2 ( -0.301451 -0.000000 0.397000 ) ( 0.000000 0.000000 0.000000 )

"Tail2" 15 ( -0.985160 -0.000000 0.496078 ) ( -0.070561 -0.070561 -0.703577 )

"Tail3" 16 ( -2.049089 0.000000 0.757557 ) ( -0.054335 -0.054335 -0.705016 )

"Tail4" 17 ( -3.221888 0.000000 0.939409 ) ( -0.131021 -0.131021 -0.694862 )

' stopping at '}'

-- created temporary file: 'joints' --

0x0000000000: wrote raw string '
\n "Pachirisu" -1 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )
\n "Origin" 0 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )
\n "Waist" 1 ( 0.126114 0.000000 0.397004 ) ( -0.707107 0.000000 0.000000 )
\n "LThigh" 2 ( 0.068227 0.285930 0.397052 ) ( 0.000000 1.000000 0.000000 )
\n "LFoot" 3 ( 0.068227 0.285930 0.125448 ) ( 0.000000 1.000000 0.000000 )
\n "RThigh" 2 ( 0.068227 -0.285930 0.397052 ) ( 0.000000 0.000000 0.000000 )
\n "RFoot" 5 ( 0.068227 -0.285930 0.125448 ) ( 0.000000 0.000000 0.000000 )
\n "Spine" 2 ( 0.126114 0.000000 0.639819 ) ( -0.707107 0.000000 0.000000 )
\n "Head" 7 ( 0.126114 0.000000 1.099892 ) ( 0.000000 0.000000 0.000000 )
\n "LEar" 8 ( 0.090657 0.433147 2.319344 ) ( -0.694692 0.000000 0.000000 )
\n "REar" 8 ( 0.090657 -0.433147 2.319349 ) ( 0.000000 -0.719307 0.694692 )
\n "LArm" 7 ( 0.212077 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )
\n "LHand" 11 ( 0.492319 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )
\n "RArm" 7 ( 0.212077 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )
\n "RHand" 13 ( 0.492319 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )
\n "Tail1" 2 ( -0.301451 -0.000000 0.397000 ) ( 0.000000 0.000000 0.000000 )
\n "Tail2" 15 ( -0.985160 -0.000000 0.496078 ) ( -0.070561 -0.070561 -0.703577 )
\n "Tail3" 16 ( -2.049089 0.000000 0.757557 ) ( -0.054335 -0.054335 -0.705016 )
\n "Tail4" 17 ( -3.221888 0.000000 0.939409 ) ( -0.131021 -0.131021 -0.694862 )
\n'
0x00000005A0: jumping to: 0x0000000000 from start of file
---FORMAT---: created Object: rig_obj
0x0000000000: read raw string '
' stopping at '\n'
0x0000000002: read raw string ' "Pachirisu" -1 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )
' stopping at '\n'
0x0000000051: read raw string ' "Origin" 0 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )
' stopping at '\n'
0x000000009C: read raw string ' "Waist" 1 ( 0.126114 0.000000 0.397004 ) ( -0.707107 0.000000 0.000000 )
' stopping at '\n'
0x00000000E7: read raw string ' "LThigh" 2 ( 0.068227 0.285930 0.397052 ) ( 0.000000 1.000000 0.000000 )
' stopping at '\n'
0x0000000132: read raw string ' "LFoot" 3 ( 0.068227 0.285930 0.125448 ) ( 0.000000 1.000000 0.000000 )
' stopping at '\n'
0x000000017C: read raw string ' "RThigh" 2 ( 0.068227 -0.285930 0.397052 ) ( 0.000000 0.000000 0.000000 )
' stopping at '\n'
0x00000001C8: read raw string ' "RFoot" 5 ( 0.068227 -0.285930 0.125448 ) ( 0.000000 0.000000 0.000000 )
' stopping at '\n'
0x0000000213: read raw string ' "Spine" 2 ( 0.126114 0.000000 0.639819 ) ( -0.707107 0.000000 0.000000 )
' stopping at '\n'
0x000000025E: read raw string ' "Head" 7 ( 0.126114 0.000000 1.099892 ) ( 0.000000 0.000000 0.000000 )
' stopping at '\n'
0x00000002A7: read raw string ' "LEar" 8 ( 0.090657 0.433147 2.319344 ) ( -0.694692 0.000000 0.000000 )
' stopping at '\n'
0x00000002F1: read raw string ' "REar" 8 ( 0.090657 -0.433147 2.319349 ) ( 0.000000 -0.719307 0.694692 )
' stopping at '\n'
0x000000033C: read raw string ' "LArm" 7 ( 0.212077 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )
' stopping at '\n'
0x0000000385: read raw string ' "LHand" 11 ( 0.492319 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )
' stopping at '\n'
0x00000003D0: read raw string ' "RArm" 7 ( 0.212077 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )
' stopping at '\n'
0x000000041A: read raw string ' "RHand" 13 ( 0.492319 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )
' stopping at '\n'
0x0000000466: read raw string ' "Tail1" 2 ( -0.301451 -0.000000 0.397000 ) ( 0.000000 0.000000 0.000000 )
' stopping at '\n'
0x00000004B2: read raw string ' "Tail2" 15 ( -0.985160 -0.000000 0.496078 ) ( -0.070561 -0.070561 -0.703577 )
' stopping at '\n'
0x0000000502: read raw string ' "Tail3" 16 ( -2.049089 0.000000 0.757557 ) ( -0.054335 -0.054335 -0.705016 )
' stopping at '\n'

-- switched to file: 'Pachirisu.md5mesh' --

0x00000005E7: read raw string '



mesh' stopping at ' '

not quite finished yet...
still need to log the string's start character, and other modes
as well as use new-lines '\n' in the log (look at the wrote string)

you may have also noticed the "---FORMAT---:" in the log. :3
that's another new feature I forgot to mention about. ;)
but that's released already :p

EDIT:
alright, fixed that up:
Universal Model Converter - Session Log


-- importing Pachirisu.md5mesh --

0x0000000000: read raw string 'MD5Version' starting at non-whitespace, stopping at ' '
0x000000000B: read raw string '10
' starting at non-whitespace, stopping at '\n'
0x000000000F: read raw string 'commandline' starting at non-whitespace, stopping at ' '
0x000000001B: read raw string '""
' starting at non-whitespace, stopping at '\n'
0x000000001F: read raw string ' numJoints' starting at non-whitespace, stopping at ' '
0x000000002B: read raw string '19
' starting at non-whitespace, stopping at '\n'
0x000000002F: read raw string 'numMeshes' starting at non-whitespace, stopping at ' '
0x0000000039: read raw string '3
' starting at non-whitespace, stopping at '\n'
0x000000003C: read raw string ' joints' starting at non-whitespace, stopping at ' '
0x0000000045: read raw string ' "Pachirisu" -1 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 ) "Origin" 0 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 ) "Waist" 1 ( 0.126114 0.000000 0.397004 ) ( -0.707107 0.000000 0.000000 ) "LThigh" 2 ( 0.068227 0.285930 0.397052 ) ( 0.000000 1.000000 0.000000 ) "LFoot" 3 ( 0.068227 0.285930 0.125448 ) ( 0.000000 1.000000 0.000000 ) "RThigh" 2 ( 0.068227 -0.285930 0.397052 ) ( 0.000000 0.000000 0.000000 ) "RFoot" 5 ( 0.068227 -0.285930 0.125448 ) ( 0.000000 0.000000 0.000000 ) "Spine" 2 ( 0.126114 0.000000 0.639819 ) ( -0.707107 0.000000 0.000000 ) "Head" 7 ( 0.126114 0.000000 1.099892 ) ( 0.000000 0.000000 0.000000 ) "LEar" 8 ( 0.090657 0.433147 2.319344 ) ( -0.694692 0.000000 0.000000 ) "REar" 8 ( 0.090657 -0.433147 2.319349 ) ( 0.000000 -0.719307 0.694692 ) "LArm" 7 ( 0.212077 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 ) "LHand" 11 ( 0.492319 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 ) "RArm" 7 ( 0.212077 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 ) "RHand" 13 ( 0.492319 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 ) "Tail1" 2 ( -0.301451 -0.000000 0.397000 ) ( 0.000000 0.000000 0.000000 ) "Tail2" 15 ( -0.985160 -0.000000 0.496078 ) ( -0.070561 -0.070561 -0.703577 ) "Tail3" 16 ( -2.049089 0.000000 0.757557 ) ( -0.054335 -0.054335 -0.705016 ) "Tail4" 17 ( -3.221888 0.000000 0.939409 ) ( -0.131021 -0.131021 -0.694862 ) ' starting at '{', stopping at '}'

-- created temporary file: 'joints' --

0x0000000000: wrote raw string ' "Pachirisu" -1 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 ) "Origin" 0 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 ) "Waist" 1 ( 0.126114 0.000000 0.397004 ) ( -0.707107 0.000000 0.000000 ) "LThigh" 2 ( 0.068227 0.285930 0.397052 ) ( 0.000000 1.000000 0.000000 ) "LFoot" 3 ( 0.068227 0.285930 0.125448 ) ( 0.000000 1.000000 0.000000 ) "RThigh" 2 ( 0.068227 -0.285930 0.397052 ) ( 0.000000 0.000000 0.000000 ) "RFoot" 5 ( 0.068227 -0.285930 0.125448 ) ( 0.000000 0.000000 0.000000 ) "Spine" 2 ( 0.126114 0.000000 0.639819 ) ( -0.707107 0.000000 0.000000 ) "Head" 7 ( 0.126114 0.000000 1.099892 ) ( 0.000000 0.000000 0.000000 ) "LEar" 8 ( 0.090657 0.433147 2.319344 ) ( -0.694692 0.000000 0.000000 ) "REar" 8 ( 0.090657 -0.433147 2.319349 ) ( 0.000000 -0.719307 0.694692 ) "LArm" 7 ( 0.212077 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 ) "LHand" 11 ( 0.492319 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 ) "RArm" 7 ( 0.212077 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 ) "RHand" 13 ( 0.492319 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 ) "Tail1" 2 ( -0.301451 -0.000000 0.397000 ) ( 0.000000 0.000000 0.000000 ) "Tail2" 15 ( -0.985160 -0.000000 0.496078 ) ( -0.070561 -0.070561 -0.703577 ) "Tail3" 16 ( -2.049089 0.000000 0.757557 ) ( -0.054335 -0.054335 -0.705016 ) "Tail4" 17 ( -3.221888 0.000000 0.939409 ) ( -0.131021 -0.131021 -0.694862 ) '
0x00000005A0: jumping to: 0x0000000000 from start of file
---FORMAT---: created Object: rig_obj
0x0000000000: read raw string '
' starting at non-whitespace, stopping at '\n'
0x0000000002: read raw string ' "Pachirisu" -1 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x0000000051: read raw string ' "Origin" 0 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x000000009C: read raw string ' "Waist" 1 ( 0.126114 0.000000 0.397004 ) ( -0.707107 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x00000000E7: read raw string ' "LThigh" 2 ( 0.068227 0.285930 0.397052 ) ( 0.000000 1.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x0000000132: read raw string ' "LFoot" 3 ( 0.068227 0.285930 0.125448 ) ( 0.000000 1.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x000000017C: read raw string ' "RThigh" 2 ( 0.068227 -0.285930 0.397052 ) ( 0.000000 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x00000001C8: read raw string ' "RFoot" 5 ( 0.068227 -0.285930 0.125448 ) ( 0.000000 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x0000000213: read raw string ' "Spine" 2 ( 0.126114 0.000000 0.639819 ) ( -0.707107 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x000000025E: read raw string ' "Head" 7 ( 0.126114 0.000000 1.099892 ) ( 0.000000 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x00000002A7: read raw string ' "LEar" 8 ( 0.090657 0.433147 2.319344 ) ( -0.694692 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x00000002F1: read raw string ' "REar" 8 ( 0.090657 -0.433147 2.319349 ) ( 0.000000 -0.719307 0.694692 )
' starting at non-whitespace, stopping at '\n'
0x000000033C: read raw string ' "LArm" 7 ( 0.212077 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x0000000385: read raw string ' "LHand" 11 ( 0.492319 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x00000003D0: read raw string ' "RArm" 7 ( 0.212077 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x000000041A: read raw string ' "RHand" 13 ( 0.492319 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x0000000466: read raw string ' "Tail1" 2 ( -0.301451 -0.000000 0.397000 ) ( 0.000000 0.000000 0.000000 )
' starting at non-whitespace, stopping at '\n'
0x00000004B2: read raw string ' "Tail2" 15 ( -0.985160 -0.000000 0.496078 ) ( -0.070561 -0.070561 -0.703577 )
' starting at non-whitespace, stopping at '\n'
0x0000000502: read raw string ' "Tail3" 16 ( -2.049089 0.000000 0.757557 ) ( -0.054335 -0.054335 -0.705016 )
' starting at non-whitespace, stopping at '\n'

-- switched to file: 'Pachirisu.md5mesh' --

0x00000005E7: read raw string ' mesh' starting at non-whitespace, stopping at ' '

all that's left is to get the recursive mode working. :p

EDIT:
would you guys like me to include COMMON's functions in the log??
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
also, another good reason for UMC
I've been wanting to make Brawl for Blender, and I need the good quality models to be able to do it :3

EDIT:
UGC should be able to convert Brawl into a .blend file with no hasstle ;)
but that's once everything's figured out... heh.
(also, duplicate data will be discarded where needed)
^ brawl should shrink down by a few GB

I'm guessing it'll be around 4-6GB
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
finally got bones to show:

MD5 axis standard: Y,Z,X (width, height, depth)

here's the log:
Universal Model Converter - Session Log


-- importing Pachirisu.md5mesh --

0x0000000000: read raw string 'MD5Version' starting at non-whitespace, stopping at ' '
0x000000000B: read raw string '10
' starting at non-whitespace, stopping at '\n'
0x000000000F: read raw string 'commandline' starting at non-whitespace, stopping at ' '
0x000000001B: read raw string '""
' starting at non-whitespace, stopping at '\n'
0x000000001F: read raw string '

numJoints' starting at non-whitespace, stopping at ' '
0x000000002B: read raw string '19
' starting at non-whitespace, stopping at '\n'
0x000000002F: read raw string 'numMeshes' starting at non-whitespace, stopping at ' '
0x0000000039: read raw string '3
' starting at non-whitespace, stopping at '\n'
0x000000003C: read raw string '

joints' starting at non-whitespace, stopping at ' '
0x0000000045: read raw string '

"Pachirisu" -1 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )

"Origin" 0 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )

"Waist" 1 ( 0.126114 0.000000 0.397004 ) ( -0.707107 0.000000 0.000000 )

"LThigh" 2 ( 0.068227 0.285930 0.397052 ) ( 0.000000 1.000000 0.000000 )

"LFoot" 3 ( 0.068227 0.285930 0.125448 ) ( 0.000000 1.000000 0.000000 )

"RThigh" 2 ( 0.068227 -0.285930 0.397052 ) ( 0.000000 0.000000 0.000000 )

"RFoot" 5 ( 0.068227 -0.285930 0.125448 ) ( 0.000000 0.000000 0.000000 )

"Spine" 2 ( 0.126114 0.000000 0.639819 ) ( -0.707107 0.000000 0.000000 )

"Head" 7 ( 0.126114 0.000000 1.099892 ) ( 0.000000 0.000000 0.000000 )

"LEar" 8 ( 0.090657 0.433147 2.319344 ) ( -0.694692 0.000000 0.000000 )

"REar" 8 ( 0.090657 -0.433147 2.319349 ) ( 0.000000 -0.719307 0.694692 )

"LArm" 7 ( 0.212077 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )

"LHand" 11 ( 0.492319 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )

"RArm" 7 ( 0.212077 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )

"RHand" 13 ( 0.492319 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )

"Tail1" 2 ( -0.301451 -0.000000 0.397000 ) ( 0.000000 0.000000 0.000000 )

"Tail2" 15 ( -0.985160 -0.000000 0.496078 ) ( -0.070561 -0.070561 -0.703577 )

"Tail3" 16 ( -2.049089 0.000000 0.757557 ) ( -0.054335 -0.054335 -0.705016 )

"Tail4" 17 ( -3.221888 0.000000 0.939409 ) ( -0.131021 -0.131021 -0.694862 )

' starting at '{', stopping at '}'

-- created temporary file: 'joints' --

0x0000000000: wrote raw string '

"Pachirisu" -1 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )

"Origin" 0 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )

"Waist" 1 ( 0.126114 0.000000 0.397004 ) ( -0.707107 0.000000 0.000000 )

"LThigh" 2 ( 0.068227 0.285930 0.397052 ) ( 0.000000 1.000000 0.000000 )

"LFoot" 3 ( 0.068227 0.285930 0.125448 ) ( 0.000000 1.000000 0.000000 )

"RThigh" 2 ( 0.068227 -0.285930 0.397052 ) ( 0.000000 0.000000 0.000000 )

"RFoot" 5 ( 0.068227 -0.285930 0.125448 ) ( 0.000000 0.000000 0.000000 )

"Spine" 2 ( 0.126114 0.000000 0.639819 ) ( -0.707107 0.000000 0.000000 )

"Head" 7 ( 0.126114 0.000000 1.099892 ) ( 0.000000 0.000000 0.000000 )

"LEar" 8 ( 0.090657 0.433147 2.319344 ) ( -0.694692 0.000000 0.000000 )

"REar" 8 ( 0.090657 -0.433147 2.319349 ) ( 0.000000 -0.719307 0.694692 )

"LArm" 7 ( 0.212077 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )

"LHand" 11 ( 0.492319 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )

"RArm" 7 ( 0.212077 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )

"RHand" 13 ( 0.492319 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )

"Tail1" 2 ( -0.301451 -0.000000 0.397000 ) ( 0.000000 0.000000 0.000000 )

"Tail2" 15 ( -0.985160 -0.000000 0.496078 ) ( -0.070561 -0.070561 -0.703577 )

"Tail3" 16 ( -2.049089 0.000000 0.757557 ) ( -0.054335 -0.054335 -0.705016 )

"Tail4" 17 ( -3.221888 0.000000 0.939409 ) ( -0.131021 -0.131021 -0.694862 )

'
0x00000005A0: jumping to: 0x0000000000 from start of file
---FORMAT---: created Object: rig_obj
0x0000000000: read raw string '

"Pachirisu"' starting at non-whitespace, stopping at ' '
0x000000000F: read raw string '-1' starting at non-whitespace, stopping at ' '
0x0000000012: read raw string ' 0.000000 0.000000 0.000000 ' starting at '(', stopping at ')'
0x0000000030: read raw string ' 0.000000 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "Pachirisu"
0x000000004F: read raw string '

"Origin"' starting at non-whitespace, stopping at ' '
0x000000005B: read raw string '0' starting at non-whitespace, stopping at ' '
0x000000005D: read raw string ' 0.000000 0.000000 0.000000 ' starting at '(', stopping at ')'
0x000000007B: read raw string ' 0.000000 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "Origin"
0x000000009A: read raw string '

"Waist"' starting at non-whitespace, stopping at ' '
0x00000000A5: read raw string '1' starting at non-whitespace, stopping at ' '
0x00000000A7: read raw string ' 0.126114 0.000000 0.397004 ' starting at '(', stopping at ')'
0x00000000C5: read raw string ' -0.707107 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "Waist"
0x00000000E5: read raw string '

"LThigh"' starting at non-whitespace, stopping at ' '
0x00000000F1: read raw string '2' starting at non-whitespace, stopping at ' '
0x00000000F3: read raw string ' 0.068227 0.285930 0.397052 ' starting at '(', stopping at ')'
0x0000000111: read raw string ' 0.000000 1.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "LThigh"
0x0000000130: read raw string '

"LFoot"' starting at non-whitespace, stopping at ' '
0x000000013B: read raw string '3' starting at non-whitespace, stopping at ' '
0x000000013D: read raw string ' 0.068227 0.285930 0.125448 ' starting at '(', stopping at ')'
0x000000015B: read raw string ' 0.000000 1.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "LFoot"
0x000000017A: read raw string '

"RThigh"' starting at non-whitespace, stopping at ' '
0x0000000186: read raw string '2' starting at non-whitespace, stopping at ' '
0x0000000188: read raw string ' 0.068227 -0.285930 0.397052 ' starting at '(', stopping at ')'
0x00000001A7: read raw string ' 0.000000 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "RThigh"
0x00000001C6: read raw string '

"RFoot"' starting at non-whitespace, stopping at ' '
0x00000001D1: read raw string '5' starting at non-whitespace, stopping at ' '
0x00000001D3: read raw string ' 0.068227 -0.285930 0.125448 ' starting at '(', stopping at ')'
0x00000001F2: read raw string ' 0.000000 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "RFoot"
0x0000000211: read raw string '

"Spine"' starting at non-whitespace, stopping at ' '
0x000000021C: read raw string '2' starting at non-whitespace, stopping at ' '
0x000000021E: read raw string ' 0.126114 0.000000 0.639819 ' starting at '(', stopping at ')'
0x000000023C: read raw string ' -0.707107 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "Spine"
0x000000025C: read raw string '

"Head"' starting at non-whitespace, stopping at ' '
0x0000000266: read raw string '7' starting at non-whitespace, stopping at ' '
0x0000000268: read raw string ' 0.126114 0.000000 1.099892 ' starting at '(', stopping at ')'
0x0000000286: read raw string ' 0.000000 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "Head"
0x00000002A5: read raw string '

"LEar"' starting at non-whitespace, stopping at ' '
0x00000002AF: read raw string '8' starting at non-whitespace, stopping at ' '
0x00000002B1: read raw string ' 0.090657 0.433147 2.319344 ' starting at '(', stopping at ')'
0x00000002CF: read raw string ' -0.694692 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "LEar"
0x00000002EF: read raw string '

"REar"' starting at non-whitespace, stopping at ' '
0x00000002F9: read raw string '8' starting at non-whitespace, stopping at ' '
0x00000002FB: read raw string ' 0.090657 -0.433147 2.319349 ' starting at '(', stopping at ')'
0x000000031A: read raw string ' 0.000000 -0.719307 0.694692 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "REar"
0x000000033A: read raw string '

"LArm"' starting at non-whitespace, stopping at ' '
0x0000000344: read raw string '7' starting at non-whitespace, stopping at ' '
0x0000000346: read raw string ' 0.212077 0.319108 0.929318 ' starting at '(', stopping at ')'
0x0000000364: read raw string ' 0.000000 1.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "LArm"
0x0000000383: read raw string '

"LHand"' starting at non-whitespace, stopping at ' '
0x000000038E: read raw string '11' starting at non-whitespace, stopping at ' '
0x0000000391: read raw string ' 0.492319 0.319108 0.929318 ' starting at '(', stopping at ')'
0x00000003AF: read raw string ' 0.000000 1.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "LHand"
0x00000003CE: read raw string '

"RArm"' starting at non-whitespace, stopping at ' '
0x00000003D8: read raw string '7' starting at non-whitespace, stopping at ' '
0x00000003DA: read raw string ' 0.212077 -0.319108 0.929319 ' starting at '(', stopping at ')'
0x00000003F9: read raw string ' 0.000000 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "RArm"
0x0000000418: read raw string '

"RHand"' starting at non-whitespace, stopping at ' '
0x0000000423: read raw string '13' starting at non-whitespace, stopping at ' '
0x0000000426: read raw string ' 0.492319 -0.319108 0.929319 ' starting at '(', stopping at ')'
0x0000000445: read raw string ' 0.000000 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "RHand"
0x0000000464: read raw string '

"Tail1"' starting at non-whitespace, stopping at ' '
0x000000046F: read raw string '2' starting at non-whitespace, stopping at ' '
0x0000000471: read raw string ' -0.301451 -0.000000 0.397000 ' starting at '(', stopping at ')'
0x0000000491: read raw string ' 0.000000 0.000000 0.000000 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "Tail1"
0x00000004B0: read raw string '

"Tail2"' starting at non-whitespace, stopping at ' '
0x00000004BB: read raw string '15' starting at non-whitespace, stopping at ' '
0x00000004BE: read raw string ' -0.985160 -0.000000 0.496078 ' starting at '(', stopping at ')'
0x00000004DE: read raw string ' -0.070561 -0.070561 -0.703577 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "Tail2"
0x0000000500: read raw string '

"Tail3"' starting at non-whitespace, stopping at ' '
0x000000050B: read raw string '16' starting at non-whitespace, stopping at ' '
0x000000050E: read raw string ' -2.049089 0.000000 0.757557 ' starting at '(', stopping at ')'
0x000000052D: read raw string ' -0.054335 -0.054335 -0.705016 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "Tail3"
0x000000054F: read raw string '

"Tail4"' starting at non-whitespace, stopping at ' '
0x000000055A: read raw string '17' starting at non-whitespace, stopping at ' '
0x000000055D: read raw string ' -3.221888 0.000000 0.939409 ' starting at '(', stopping at ')'
0x000000057C: read raw string ' -0.131021 -0.131021 -0.694862 ' starting at '(', stopping at ')'
---FORMAT---: created Bone: "Tail4"

-- switched to file: 'Pachirisu.md5mesh' --

0x00000005E7: read raw string '



mesh' starting at non-whitespace, stopping at ' '

I have a break set at the first occurence of a mesh, so that's why it does that :p

EDIT:
if anyone else is having problems with my functions or is doing something a little bit too complex,
please tell me and I will do my best to fix it, or tell me your ideas for improvements and I'll try to add them.

I want UMC script programming to be as simple and convenient as possible. ;)
(I want noobs to be able to use it w/o asking many questions about programming)

it should be just a simple as "give me this number, and I'll throw it here"
I'll work on string-number support as well...
(no more setVert( float(X), ... ) complications)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
a big update for script programmers:

made a few changes to how string() loggs:
Code:
Universal Model Converter - Session Log


-- importing Pachirisu.md5mesh --

0x0000000000: read string 'MD5Version' from whitespace to ' '
0x000000000B: read string '10
' from whitespace to '\n'
0x000000000F: read string 'commandline' from whitespace to ' '
0x000000001B: read string '""
' from whitespace to '\n'
0x000000001F: read string 'numJoints' from whitespace to ' '
0x000000002B: read string '19
' from whitespace to '\n'
0x000000002F: read string 'numMeshes' from whitespace to ' '
0x0000000039: read string '3
' from whitespace to '\n'
0x000000003C: read string 'joints' from whitespace to ' '
0x0000000045: read string '

	"Pachirisu" -1 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )

	"Origin" 0 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )

	"Waist" 1 ( 0.126114 0.000000 0.397004 ) ( -0.707107 0.000000 0.000000 )

	"LThigh" 2 ( 0.068227 0.285930 0.397052 ) ( 0.000000 1.000000 0.000000 )

	"LFoot" 3 ( 0.068227 0.285930 0.125448 ) ( 0.000000 1.000000 0.000000 )

	"RThigh" 2 ( 0.068227 -0.285930 0.397052 ) ( 0.000000 0.000000 0.000000 )

	"RFoot" 5 ( 0.068227 -0.285930 0.125448 ) ( 0.000000 0.000000 0.000000 )

	"Spine" 2 ( 0.126114 0.000000 0.639819 ) ( -0.707107 0.000000 0.000000 )

	"Head" 7 ( 0.126114 0.000000 1.099892 ) ( 0.000000 0.000000 0.000000 )

	"LEar" 8 ( 0.090657 0.433147 2.319344 ) ( -0.694692 0.000000 0.000000 )

	"REar" 8 ( 0.090657 -0.433147 2.319349 ) ( 0.000000 -0.719307 0.694692 )

	"LArm" 7 ( 0.212077 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )

	"LHand" 11 ( 0.492319 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )

	"RArm" 7 ( 0.212077 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )

	"RHand" 13 ( 0.492319 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )

	"Tail1" 2 ( -0.301451 -0.000000 0.397000 ) ( 0.000000 0.000000 0.000000 )

	"Tail2" 15 ( -0.985160 -0.000000 0.496078 ) ( -0.070561 -0.070561 -0.703577 )

	"Tail3" 16 ( -2.049089 0.000000 0.757557 ) ( -0.054335 -0.054335 -0.705016 )

	"Tail4" 17 ( -3.221888 0.000000 0.939409 ) ( -0.131021 -0.131021 -0.694862 )

' from '{' to '}'

-- created temporary file: 'joints' --

0x0000000000: wrote string '

	"Pachirisu" -1 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )

	"Origin" 0 ( 0.000000 0.000000 0.000000 ) ( 0.000000 0.000000 0.000000 )

	"Waist" 1 ( 0.126114 0.000000 0.397004 ) ( -0.707107 0.000000 0.000000 )

	"LThigh" 2 ( 0.068227 0.285930 0.397052 ) ( 0.000000 1.000000 0.000000 )

	"LFoot" 3 ( 0.068227 0.285930 0.125448 ) ( 0.000000 1.000000 0.000000 )

	"RThigh" 2 ( 0.068227 -0.285930 0.397052 ) ( 0.000000 0.000000 0.000000 )

	"RFoot" 5 ( 0.068227 -0.285930 0.125448 ) ( 0.000000 0.000000 0.000000 )

	"Spine" 2 ( 0.126114 0.000000 0.639819 ) ( -0.707107 0.000000 0.000000 )

	"Head" 7 ( 0.126114 0.000000 1.099892 ) ( 0.000000 0.000000 0.000000 )

	"LEar" 8 ( 0.090657 0.433147 2.319344 ) ( -0.694692 0.000000 0.000000 )

	"REar" 8 ( 0.090657 -0.433147 2.319349 ) ( 0.000000 -0.719307 0.694692 )

	"LArm" 7 ( 0.212077 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )

	"LHand" 11 ( 0.492319 0.319108 0.929318 ) ( 0.000000 1.000000 0.000000 )

	"RArm" 7 ( 0.212077 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )

	"RHand" 13 ( 0.492319 -0.319108 0.929319 ) ( 0.000000 0.000000 0.000000 )

	"Tail1" 2 ( -0.301451 -0.000000 0.397000 ) ( 0.000000 0.000000 0.000000 )

	"Tail2" 15 ( -0.985160 -0.000000 0.496078 ) ( -0.070561 -0.070561 -0.703577 )

	"Tail3" 16 ( -2.049089 0.000000 0.757557 ) ( -0.054335 -0.054335 -0.705016 )

	"Tail4" 17 ( -3.221888 0.000000 0.939409 ) ( -0.131021 -0.131021 -0.694862 )

'
0x00000005A0: jumping to: 0x0000000000 from start of file
---FORMAT---: created Object: rig_obj
0x0000000000: read string 'Pachirisu' from '"' to '"'
0x000000000E: read string '-1' from whitespace to ' '
0x0000000012: read string ' 0.000000 0.000000 0.000000 ' from '(' to ')'
0x0000000030: read string ' 0.000000 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: Pachirisu
0x000000004F: read string 'Origin' from '"' to '"'
0x000000005A: read string '0' from whitespace to ' '
0x000000005D: read string ' 0.000000 0.000000 0.000000 ' from '(' to ')'
0x000000007B: read string ' 0.000000 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: Origin
0x000000009A: read string 'Waist' from '"' to '"'
0x00000000A4: read string '1' from whitespace to ' '
0x00000000A7: read string ' 0.126114 0.000000 0.397004 ' from '(' to ')'
0x00000000C5: read string ' -0.707107 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: Waist
0x00000000E5: read string 'LThigh' from '"' to '"'
0x00000000F0: read string '2' from whitespace to ' '
0x00000000F3: read string ' 0.068227 0.285930 0.397052 ' from '(' to ')'
0x0000000111: read string ' 0.000000 1.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: LThigh
0x0000000130: read string 'LFoot' from '"' to '"'
0x000000013A: read string '3' from whitespace to ' '
0x000000013D: read string ' 0.068227 0.285930 0.125448 ' from '(' to ')'
0x000000015B: read string ' 0.000000 1.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: LFoot
0x000000017A: read string 'RThigh' from '"' to '"'
0x0000000185: read string '2' from whitespace to ' '
0x0000000188: read string ' 0.068227 -0.285930 0.397052 ' from '(' to ')'
0x00000001A7: read string ' 0.000000 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: RThigh
0x00000001C6: read string 'RFoot' from '"' to '"'
0x00000001D0: read string '5' from whitespace to ' '
0x00000001D3: read string ' 0.068227 -0.285930 0.125448 ' from '(' to ')'
0x00000001F2: read string ' 0.000000 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: RFoot
0x0000000211: read string 'Spine' from '"' to '"'
0x000000021B: read string '2' from whitespace to ' '
0x000000021E: read string ' 0.126114 0.000000 0.639819 ' from '(' to ')'
0x000000023C: read string ' -0.707107 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: Spine
0x000000025C: read string 'Head' from '"' to '"'
0x0000000265: read string '7' from whitespace to ' '
0x0000000268: read string ' 0.126114 0.000000 1.099892 ' from '(' to ')'
0x0000000286: read string ' 0.000000 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: Head
0x00000002A5: read string 'LEar' from '"' to '"'
0x00000002AE: read string '8' from whitespace to ' '
0x00000002B1: read string ' 0.090657 0.433147 2.319344 ' from '(' to ')'
0x00000002CF: read string ' -0.694692 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: LEar
0x00000002EF: read string 'REar' from '"' to '"'
0x00000002F8: read string '8' from whitespace to ' '
0x00000002FB: read string ' 0.090657 -0.433147 2.319349 ' from '(' to ')'
0x000000031A: read string ' 0.000000 -0.719307 0.694692 ' from '(' to ')'
---FORMAT---: created Bone: REar
0x000000033A: read string 'LArm' from '"' to '"'
0x0000000343: read string '7' from whitespace to ' '
0x0000000346: read string ' 0.212077 0.319108 0.929318 ' from '(' to ')'
0x0000000364: read string ' 0.000000 1.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: LArm
0x0000000383: read string 'LHand' from '"' to '"'
0x000000038D: read string '11' from whitespace to ' '
0x0000000391: read string ' 0.492319 0.319108 0.929318 ' from '(' to ')'
0x00000003AF: read string ' 0.000000 1.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: LHand
0x00000003CE: read string 'RArm' from '"' to '"'
0x00000003D7: read string '7' from whitespace to ' '
0x00000003DA: read string ' 0.212077 -0.319108 0.929319 ' from '(' to ')'
0x00000003F9: read string ' 0.000000 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: RArm
0x0000000418: read string 'RHand' from '"' to '"'
0x0000000422: read string '13' from whitespace to ' '
0x0000000426: read string ' 0.492319 -0.319108 0.929319 ' from '(' to ')'
0x0000000445: read string ' 0.000000 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: RHand
0x0000000464: read string 'Tail1' from '"' to '"'
0x000000046E: read string '2' from whitespace to ' '
0x0000000471: read string ' -0.301451 -0.000000 0.397000 ' from '(' to ')'
0x0000000491: read string ' 0.000000 0.000000 0.000000 ' from '(' to ')'
---FORMAT---: created Bone: Tail1
0x00000004B0: read string 'Tail2' from '"' to '"'
0x00000004BA: read string '15' from whitespace to ' '
0x00000004BE: read string ' -0.985160 -0.000000 0.496078 ' from '(' to ')'
0x00000004DE: read string ' -0.070561 -0.070561 -0.703577 ' from '(' to ')'
---FORMAT---: created Bone: Tail2
0x0000000500: read string 'Tail3' from '"' to '"'
0x000000050A: read string '16' from whitespace to ' '
0x000000050E: read string ' -2.049089 0.000000 0.757557 ' from '(' to ')'
0x000000052D: read string ' -0.054335 -0.054335 -0.705016 ' from '(' to ')'
---FORMAT---: created Bone: Tail3
0x000000054F: read string 'Tail4' from '"' to '"'
0x0000000559: read string '17' from whitespace to ' '
0x000000055D: read string ' -3.221888 0.000000 0.939409 ' from '(' to ')'
0x000000057C: read string ' -0.131021 -0.131021 -0.694862 ' from '(' to ')'
---FORMAT---: created Bone: Tail4

-- switched to file: 'Pachirisu.md5mesh' --

0x00000005E7: read string 'mesh' from whitespace to ' '
also: pstring() now works properly

tbh String(), string(), and pstring() are all the same function pString()...
String() just sends the offset of the current file to pString().
(users cannot access the offset w/o making major changes to COMMON)

also, another dev5 update: I'm scrapping API.py for API/__init__.py
(COMMON, FORMAT, and FILE will be part of API/)
^ making things easier to program for and update

data/ is also renamed plugins/ for LOGGER, VIEWER, GUI, UPDATE, and more.
(GUI won't require VIEWER either)

if you only have GUI, the API will auto-adapt and display a basic buttons window showing alot of the options of the VIEWER+GUI mode, as well as info as to what's imported.
though I can only assume it will be slower due to PyQt.

also, I'm close to cracking PyStream Shaders ;D
I've figured out the installation, but am still working on the usage...
(creating shaders is easy, but using them, I still need to find)
and yes, these are GLSL shaders written in the Python language (following GLSL standards)

a nifty feature: I can import the shader and use the functions defined in it without hastle. :D
so that's another dev5 update. XD


as for MD5, I'm working on creating the meshes now. ;)


EDIT:
I'll be honest, I still have yet to add a few of the complex features such as string( [1] ) (or readline) and recursive checking

note:
string( [5] ) - read 5 lines
string( [0] ) - string( [ ] )
string( [-0] ) - list(reversed( string( [ ] ) )) (I hope -0 < 0 = True)
string( [-5] ) - read 5 lines back (current pos - 5 = new pos)


EDIT2:
I'm tempted to work on a dev5 library for dev4.5 (to make porting scripts easier) :3
should I go for it and release that at the -->Next update, or should I leave it??

for example:
switch() is a class in dev5

s = switch(val)
if s.case(test):
if s.default:

why a class??:
the answer is global vs local.
"default" cannot be performed with global in an inner switch with an outer default in dev4,
and is therefore excluded:

switch
case:
-switch
-case:
-default: (optional)
default: (value-test is a result of the inner switch)

as such, you can't build a switch with cases that support fall-through and have a default.
the closest you could come to a "default" in dev4 is:

if case:
elif case:
else:

the fall-through method cannot properly support a "default"
if case:
if case:
if case:
else: (last "if" only)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
took a short break from MD5 to improve my Melee script a little...
as well as I got skype running and brawled a few of my friends :)

anyways...
got normals working: (DAT and MDL0)
Before:

After:


I still have yet to figure out the coloration issue with Pikachu...
he does have a color, but it's just gray...

EDIT:
also fixed up a bug with FORMAT:
SetFacepoint( (X,Y,Z) )
(tuples weren't supported and caused issues reported by VIEWER's build system)
^now they're converted to lists (not that it matters as you don't get to see this) :p
 
Last edited:

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
Just out of curiosity, what is the latest on MD5 exporting? I know you've gotten it to display the joint positions, but what else?

I'd hoped that, since you seemed to like that the format was just text, it would've been quick to add and/or release an export script. Seems that hasn't been the case, though.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
it's the calculations and fix-ups which are slowing me down...
it currently throws an error, or just doesn't log the verts properly.

I'm working on it though...

the normals for MD5 models need to be calculated.
but the UVs and Verts are available

though the verts aren't made available until you get to the weights,
where as the UVs are made available when you get to the "vert"s.
(which I assume stands for "vertex"::"FacePoint")

EDIT:
also, don't forget I have to add basic materials and texturing functions. :)
(that's all this current renderer can support w/o rebuilding the entire interface)

though that'll come later...
input safety is what really matters.
(passing invalid values to the functions WON'T crash the program)

I also need to make an attempt to fix that error recovery issue that blocks imports.
(I have no idea why it's blocking them as it should be resetting the var when a new import is started)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
currently working on that recursion option to stop at the proper stop-character:
{
....{
....
....} <---------------------------+
} <-- stop here, not here ^
 

Tiberious

Smash Journeyman
Joined
Jun 5, 2009
Messages
250
Is there somewhere you're counting the number of '{' it finds before the first '}'?

If not, that's how I'd do it, but I dunno if you can.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
yea, w/in the character reads :)

read = False
r=0 #recursion depth
if recursion:
....if c == start-character:
........if not read: read = 1
........else: r+=1
else:
....if not read: read = 1

if c == stop-character:
....if r>0: r-=1
....else: end read loop (return everything between the first-start and last-end characters)

the read loop wasn't set up for this until now. :)

also gotta consider:
{ <-- r = 0 (read = True)
....{ <-- r = 1
....
....} <---------------------------+
....{
....
....}
} <-- stop here, not here ^
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just hitting up on an old post
the .obj export comes in as having every normal flipped when imported into Blender. I'm not sure what can be done to correct that in the export itself
currently it exports triangles as:
f FP0 FP1 FP2

though the OBJ script's normal calculation does pose an issue...
I'll try flipping the facepoints:
f FP2 FP1 FP0

hopefully that'll suffice.

also...
for the string function
if it hits EOF it returns None regardless of it's position.

I'll try an make it stop reading and return the "portion" of the string before EOF before being told to read again to return None.
(might slow things down a tad when reading, but I'll work on improvements after quality)

but I think I've finished recursion:
Code:
        while IWLD(True) or pos<=maxfilelen:
            if read:
                c=__f[__c][pos]; pos+=1 #maintain the internal offset
                if recursion:
                   if c==_start: r+=1
                   if c==stop:
                       if r>0: r-=1
                       else: break
                elif c==stop: break #don't return the stop character
                else: STRING='%s%s'%(STRING,chr(c)) #return what's read

            else: #once read is True, it can't be set False
                c=__f[__c][pos]; pos+=1 #maintain the internal offset
                if start=='':
                    if c not in [0,10,32]: read = True; STRING='%s%s'%(STRING,chr(c))
                elif c==_start: read = True
                
            if pos>maxfilelen: return None #EOF test
^strait from the code :p

EDIT:
there we go, that should fix:
Code:
            if pos>maxfilelen: #EOF test
                if STRING=='': return None
                else: break
that was sooooo hard D:
lol XD

"break" will cancel the loop and return what's read.
(though the log currently won't report the EOF)


EDIT2:
oh I think I can remove the safety of IWLD() now XD
(Infinite While Loop Detection)

as it'll always break sooner or later now :)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
whelp...
I think I finally understand the format, and I'm doing everything wrong. D:

this format is extremely easy, but it's done through the use of classes entirely.

for example:


class Mesh:
....def __init__(self):
........self.shader = ''
........self.verts = [Vert()]
........self.numverts = len(self.verts)
........self.tris = [Tri()]
........self.numtris = len(self.tris)
........self.weights = [Weight()]
........self.numweights = len(self.weights)

meshes = [Mesh(),Mesh(),Mesh()]
numMeshes = len(meshes)

the braces mark the class as a whole and so on...

this would be easier managed with a library providing functions to it's interface.
(a good library for my first library due to it's size) :D

this'll help me work on the library integration features, since this is endlessly expandable with support. ;D
but yeh, I'll work on those features later. ;)
(it's only a pre-release of what I want dev4.5 to be)

EDIT:
the coolest part here:
I won't have to follow UMC's rules in the script except for the import and export functions.
(meaning the script itself can be extremely small)
 
Top Bottom