• 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!

SSBM: HQ (texture)

Steelia

Smash Champion
Joined
Sep 23, 2007
Messages
2,523
Location
Home.
Thank you very~ much for the kind words, everyone :roll:

Wait, MODEL CHANGED EDITS?! STEELIA SENPAI, PLEASE NOTICE ME. HOW I DO DIS
I saw the eyepatch on the wolf skin, does this mean we can finally alter UVWs?! OMG, THIS IS TOO UNREAL!
lmao, Maybe don't get too too excited; the whole process is still pretty... tedious? Definitely in the early stages. I used a special SSBM Plxxxx.dat Blender importer made by @ Tcll Tcll from quite a long time ago, so I'm not sure if he still has it... Maybe he's made a better version by now, I dunno. It's not like SSBB hacking where you simply import a model and the whole thing is there for easy editing, the bodies of imported SSBM characters were a jumbled heap of dots when I worked on this. It's a long process trying to find where the body parts are (some characters are easier than others).
For this Wolf edit, I used Fox's mic from his headset to create the eyepatch, and that alone took quite a while!

what parts of the model did you change? I dont notice any differences in the models. Outstanding work btw
For Wolf-Fox, there's the eyepatch, but I also mildly narrowed his muzzle and tail, and gave small spikes on his gloves and ankles. For Ninten-Ness, I flipped the hat, ruffled his forehead hair, and obviously removed the backpack :p
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
textures are kinda-sorta simple to replace, and can probably be resized, but we need a pointer manager to deal with the data after the resize... heh

I do so happen to have the old blender importer and exporter if anyone needs it, but yea, using it is another story...
I could more than likely build a better one, but due to UMC, and blender getting more and more complex with scripting standards,
I really hate writing blender scripts when my interface for UMC 3.0a now boasts a good 60% less code than Blender26.

blender devs seem to want you to use your code in a very complex manner, while I try to simplify and automate everything.

due to this fact, and the fact that UMC's DATA interface supports muuuuch more than python's struct module ever will, I likely won't be writing another blender script.


so instead, I'm documenting all of my knowledge and writing resources for others to learn from for the HAL_DAT format

to simply traverse the file, you need to validate the size and pointers of most of the structures, and basically build a pathfinder.
(you don't need to worry about the size of the data itself as if you can get to the mesh structures, that's good enough to mark a valid path)


if you still want to use my old script, you can use my HexEdit template to find the end of the vertex, normal (binormal and tangent), and UV datas.

you can get HexEdit (but not my patch for it) and my template from my HAL_DAT resource page.
(not my patch because I want everyone to pay for his program if they can... he really needs help)
http://wiki.tockdom.com/wiki/HAL_DAT_(File_Format)

I'm not a douche though, you can get the patch here: (this replaces the installed exe in your Program Files (x86)/HexEdit/ directory)
http://www.4shared.com/file/gmsRpsxGce/HexEditPro.html?
I don't want him to quit working on updates for this program though, which he's looking to be tied up by life already...
so please try to help him out and get a liscense for it :)
this patch is for low-lifes like me who can't get a job to afford his program.
(I'm autistic and can't work well with others, especially in stressed situations, so I live off disability, which cripples me from having a decent alternate income)
^ my autism affects my ability to understand simple procedures and very much distracts me (I won't permit myself to drive over it)

you can get my old blender scripts here:
http://www.emutalk.net/threads/5031...opment-project?p=436127&viewfull=1#post436127

all you have to do is copy the vert data (not vertex data as that usually refers to facepoint data aka display list) w/o the padding (if any), paste that data in a new file
(this data usually starts after the header at offset 0x20 or 32 bytes)

if the vert data has any padding, you can see that by a bunch of 00 bytes at the end of the data.
be careful though as the vert data is usually 2 or 4 bytes for each vert X/Y(/Z) value.

I'm currently updating my HAL_DAT template with the new pathfinder and can make it mark each vert in the data, which should make things easier to spot. :)

EDIT:
btw, if anyone has anything to contribute to the HAL_DAT page, that's the whole reason I made it a wiki-page ;)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
the bodies of imported SSBM characters were a jumbled heap of dots when I worked on this.
just read that :p

that's because the verts you're copying are what I term UnTransformed (UT):

^this is what a model looks like in your GPU's RAM before any transformations are applied

in order to transform them you need to go through the mesh data and calculate the influence matrices for each object.
a mesh structure usually gives you an array of pointers to an array of weight structures.
this array of pointers is what calculates the influence matrices (1 matrix per pointer)

once we have our matrices, the display list (or facepoint data) should contain the primitives where the first value for each facepoint is an index to an influence matrix
multiply the vert by the 3x4 matrix and multiply the normal by the 3x3 rotation matrix (same matrix, but not using the 4th column).

you should end up with this:


EDIT:
btw, I'm a horrible documentator... lol

here's the code that builds the influence matrices:

Code:
    def getWeights(WOL):
        Jump(WOL, label=' -- [ Weight_Offset ]:' )
        ML=[]
        for WO in array([bu32])(): #Matrix/Weight Offset
            Jump(WO[0]+32, label=' -- [ Bone_Offset , Weight ]:')
            inflmtx = [[0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0]]

            #---restructured using the src for BrawlBox:
            _weights = array([bu32,bf32])()
            if len(_weights)>1:
                for MO,W in _weights:
                    bind,invbind = matrices[bones.index(MO+32)]
                    tempmtx = MtxMultiply(bind,invbind)
                    '''^ that's the world-transform matrix'''
                    for r in range(4):
                        for c in range(4):
                            inflmtx[r][c]+=tempmtx[r][c]*W
            
            elif len(_weights)==1:
                MO,W = _weights[0]
                bind,invbind = matrices[bones.index(MO+32)]
                for r in range(4):
                    for c in range(4):
                        inflmtx[r][c]=bind[r][c]*W
            #---
            
            ML+=[ inflmtx ]
        return ML
WOL is the array of pointers to the weight structures.
"bones" is a list for indexing the bone offset given by the weight structure
"matrices" uses the index of "bones" to return the bind and inverse-bind matrices

I thought I updated that code, but I guess I didn't... heh
matrices = { bone_pointer: [ bind_matrix, inverse_bind_matrix ], ... }
matrices[MO+32]


and here's the code that applies the transformations:

Code:
    def transform(V,M): #transform the vector via the matrix
        return [((M[0][0]*V[0]) + (M[0][1]*V[1]) + (M[0][2]*V[2]) + M[0][3]),
                ((M[1][0]*V[0]) + (M[1][1]*V[1]) + (M[1][2]*V[2]) + M[1][3]),
                ((M[2][0]*V[0]) + (M[2][1]*V[1]) + (M[2][2]*V[2]) + M[2][3])]
    
    def Ntransform(N,M): #transform the normal via the matrix
        return [(M[0][0]*N[0]) + (M[0][1]*N[1]) + (M[0][2]*N[2]),
                (M[1][0]*N[0]) + (M[1][1]*N[1]) + (M[1][2]*N[2]),
                (M[2][0]*N[0]) + (M[2][1]*N[1]) + (M[2][2]*N[2])]
 
Last edited:

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
just read that :p

that's because the verts you're copying are what I term UnTransformed (UT):

^this is what a model looks like in your GPU's RAM before any transformations are applied

in order to transform them you need to go through the mesh data and calculate the influence matrices for each object.
a mesh structure usually gives you an array of pointers to an array of weight structures.
this array of pointers is what calculates the influence matrices (1 matrix per pointer)

once we have our matrices, the display list (or facepoint data) should contain the primitives where the first value for each facepoint is an index to an influence matrix
multiply the vert by the 3x4 matrix and multiply the normal by the 3x3 rotation matrix (same matrix, but not using the 4th column).

you should end up with this:


EDIT:
btw, I'm a horrible documentator... lol

here's the code that builds the influence matrices:

Code:
    def getWeights(WOL):
        Jump(WOL, label=' -- [ Weight_Offset ]:' )
        ML=[]
        for WO in array([bu32])(): #Matrix/Weight Offset
            Jump(WO[0]+32, label=' -- [ Bone_Offset , Weight ]:')
            inflmtx = [[0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0]]

            #---restructured using the src for BrawlBox:
            _weights = array([bu32,bf32])()
            if len(_weights)>1:
                for MO,W in _weights:
                    bind,invbind = matrices[bones.index(MO+32)]
                    tempmtx = MtxMultiply(bind,invbind)
                    '''^ that's the world-transform matrix'''
                    for r in range(4):
                        for c in range(4):
                            inflmtx[r][c]+=tempmtx[r][c]*W
           
            elif len(_weights)==1:
                MO,W = _weights[0]
                bind,invbind = matrices[bones.index(MO+32)]
                for r in range(4):
                    for c in range(4):
                        inflmtx[r][c]=bind[r][c]*W
            #---
           
            ML+=[ inflmtx ]
        return ML
WOL is the array of pointers to the weight structures.

and here's the code that applies the transformations:

Code:
    def transform(V,M): #transform the vector via the matrix
        return [((M[0][0]*V[0]) + (M[0][1]*V[1]) + (M[0][2]*V[2]) + M[0][3]),
                ((M[1][0]*V[0]) + (M[1][1]*V[1]) + (M[1][2]*V[2]) + M[1][3]),
                ((M[2][0]*V[0]) + (M[2][1]*V[1]) + (M[2][2]*V[2]) + M[2][3])]
   
    def Ntransform(N,M): #transform the normal via the matrix
        return [(M[0][0]*N[0]) + (M[0][1]*N[1]) + (M[0][2]*N[2]),
                (M[1][0]*N[0]) + (M[1][1]*N[1]) + (M[1][2]*N[2]),
                (M[2][0]*N[0]) + (M[2][1]*N[1]) + (M[2][2]*N[2])]
Would it be possible to combine your two programs. Your new model importer/exporter and your old one so that we could edit the models easier but still convert them into dat format. Most technical stuff about modeling goes over my head.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
it IS possible to build a UMC wrapper for blender, but as for UMC scripts that use UMC libraries, I can't promise that particular script will work.

what does this require?
porting UMC3.0's API to a blender script.
it sounds simple yes, but when you get to it, UMC's API is alot more complex than one would think :/

if you want to try porting 3.0a, feel free, but wait till I release this next update as scripts built under it will work in 3.0

I've got enough work on my hands to start another project :p
but hey, UMC's as open source as it can get :)
(the code for it doesn't need to be compiled on release)

3.0 will be much less tasking to port than 3.0a, but it's still not quite a stand-alone interface just yet...
I'm working on it as I learn new things, and it should evetually support everything on it's own ;)
(this isn't the first time portability has been brought up on UMC)
 

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
I wouldnt attempt something as involved as that until I had the free time to do it. What I was wondering was if it was possible to take an UMC export. Import it to blender. Make the changes you want to the model and record the verts that were altered. Then do it again with the old program. Would at least give some kind of direction for model hacking.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
it could >.>
we just need an export format importable by blender that can maintain the vertex order and such or everything could get screwed up... heh

the only export script I have is OBJ, unfortunately...

I've been wanting to write an exporter for a better format, but you know how tasking goes with me... lol

this is where I could use some help once the next update to 3.0a is released. :)
 

likiji123

Smash Journeyman
Joined
Sep 2, 2014
Messages
319
Location
Australia
NNID
Likiji123
3DS FC
2964-9225-5942
Did you model change anything for the ninten costume (looks the same to me)
 
D

Deleted member 212841

Guest
gcyftftdtfyxycyvj
 
Last edited by a moderator:

Taco

Smash Rookie
Joined
Oct 20, 2013
Messages
15
Looking forward to seeing the final result of this project, really high quality stuff right here, keep up the good work !
 

CoBam

Smash Rookie
Joined
Apr 24, 2014
Messages
20
I'm trying to replace some of the texture files individually, but I couldn't find the exact name of the files pertaining to each character. If someone could let me know what the file names for each character's textures are I would greatly appreciate it! Specifically Fox and Falco. Thank you !
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH

Steelia

Smash Champion
Joined
Sep 23, 2007
Messages
2,523
Location
Home.
Thanks a lot for the support and patience, all :)

Pardon the lack of posts on my part, I wasn't satisfied with some textures with the next char and have been reworking them a little bit. Doesn't help these remaining five fighters have like 60 textures each, good glory. But I'm aiming to hopefully get him out this month... I really look forward to making those recolors :p
 

101pie101

Smash Cadet
Joined
Jul 21, 2014
Messages
66
Location
In The Melee Workshop
Thanks a lot for the support and patience, all :)

Pardon the lack of posts on my part, I wasn't satisfied with some textures with the next char and have been reworking them a little bit. Doesn't help these remaining five fighters have like 60 textures each, good glory. But I'm aiming to hopefully get him out this month... I really look forward to making those recolors :p
So recolors, Kirby,Mewtwo,Link and Dr. Mario would be great! but if you make new one it could Marth,Roy,Peach and Zelda/Sheik
 

SLUGS

Smash Apprentice
Joined
Jun 29, 2014
Messages
81
Location
Texas
We should try to get a high quality dreamland 64 going. I noticed that might be a problem due to the lack of image size for dreamland. However reading through several other threads I saw that upscaling might be possible? (using larger images for the textures) I'm just guessing that we would have to have larger images to provide clearer textures since dreamland is a bit pixelated. Anyone knowledgable on this subject care to share any light on this?
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
My vote is for Zelda/Sheik if you're debating on who to work on next. :)
 
Last edited:

SLUGS

Smash Apprentice
Joined
Jun 29, 2014
Messages
81
Location
Texas
I've kinda made progress on a better looking dreamland for those interested...

Before:




After:


 
Last edited:

N1c2k3

Smash Lord
Joined
Jan 21, 2005
Messages
1,193
Location
Lynchburg, Va
Just dropping a line to say that you have someone else in appreciation for your work.

*Darth Sidious voice
I will watch your progress with…great interest.
 

Gavinwie

Smash Rookie
Joined
Jun 8, 2015
Messages
22
Is this still going on? It looks awesome, but i'm unaware on how to swap textures.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
Is this still going on? It looks awesome, but i'm unaware on how to swap textures.
this is actually really easy, however, there was a program IE was developing that made this even easier...

I'll edit my post when I recall it, right now I'm going to bed back to the dark realms.

EDIT:
here we are:
http://smashboards.com/threads/melee-toolkit-now-available-v1-03-alpha.334274
replacing textures is almost as easy as BrawlBox with this thing :)

but it's easier than having to hex to find the image structures to find the image data to replace... heh

I've never used this thing, but I've been told it's capable of doing so by trusty members >_>
(I think IE himself told me, but it was a while back, so I'm not sure)
 
Last edited:

Gavinwie

Smash Rookie
Joined
Jun 8, 2015
Messages
22
this is actually really easy, however, there was a program IE was developing that made this even easier...

I'll edit my post when I recall it, right now I'm going to bed back to the dark realms.

EDIT:
here we are:
http://smashboards.com/threads/melee-toolkit-now-available-v1-03-alpha.334274
replacing textures is almost as easy as BrawlBox with this thing :)

but it's easier than having to hex to find the image structures to find the image data to replace... heh

I've never used this thing, but I've been told it's capable of doing so by trusty members >_>
(I think IE himself told me, but it was a while back, so I'm not sure)
Sounds good, but I wonder if it works with nintendont on a Wii U.
 
Last edited:

oscat

Smash Journeyman
Joined
Apr 29, 2014
Messages
240
Location
So Cal
NNID
drlnklngmars
3DS FC
0318-9801-6641
I know ;)

yes it's one of those responses... lol

I don't know much about nintendont (never used it) but I know what it's supposed to do :p
One thing I have noticed about playing melee with nintendon't is that it has a lot of input delay. Thats why I switched to dios mios lite... way better!

Edit: Never mind, native control needs to be turned on.
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
One thing I have noticed about playing melee with nintendon't is that it has a lot of input delay.
any controller on the WiiU has more delay than the Wii-Mote on Wii.
the fastest controller is the gamepad (yes, even the WiiU Pro controller has more delay than the gamepad, which is sad)

Nintendo was stupid for putting GCN support through the slow USB interface

EDIT: and that's not including the slow and automated gameplay of Sm4sh
 
Last edited:

BluJay-

Smash Apprentice
Joined
Jul 20, 2015
Messages
184
Location
Ontario
NNID
jednie
Are the pictures actually HD? I'm assuming then I couldn't run this on a wii using DIOS MIOD.... Maybe when I get my new pc and my Benq monitor I'll be able to do this
 

budicetv

Smash Rookie
Joined
Jan 11, 2016
Messages
5
Thanks a lot for the support and patience, all :)

Pardon the lack of posts on my part, I wasn't satisfied with some textures with the next char and have been reworking them a little bit. Doesn't help these remaining five fighters have like 60 textures each, good glory. But I'm aiming to hopefully get him out this month... I really look forward to making those recolors :p
how's it going with those stages? :) I just downloaded the 2 you uploaded I'm gonna try them out :)

came back to say the final destination HQ is the best map ever.
 
Last edited:
Top Bottom