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

Crazy Hand v1.31 - Character editing program

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Fair enough, would you be open to open sourcing your File IO code for reading the .dat files? I think I could take on the task of porting it into the melee toolkit (I hate the idea of duplicated effort).
Absolutely, the source code is actually already included with the download at the top of this thread. I'll continue to update the source code as I add in new features to the program. The code in that first version is very sloppy though so you may want to wait until the next release where I intend tidy things up a bit more.
 

Mr. S

Smash Apprentice
Joined
Oct 11, 2014
Messages
84
Location
Ann Arbor, MI
I have some programming experience and can lend a hand in article floating points or something if you'd like.
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
I have some programming experience and can lend a hand in article floating points or something if you'd like.
Oh hey there, I recognize you. I actually really enjoy your youtube videos. They're partially what sparked my interest in melee modding.

For the time being though I believe I have all of the programming under control on my own. I appreciate the offer though. Should I maybe need some help down the road I'll check with you again to see if you still have any interest. Sound good?
 
Last edited:

Mr. S

Smash Apprentice
Joined
Oct 11, 2014
Messages
84
Location
Ann Arbor, MI
Sounds great!


And thanks. It feels good to hear that what I've done helped in inspiring someone to go and do something great. :>
 
Last edited:

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
Hmm I didn't look at that table extensively but it seems to be incomplete. Masterhand shows what they should be listed as. I'd say masterhand is more reliable than that table because it is actually reading it from the code while that list was made by who-knows but seems mostly correct from a glance.
 

OninO

Smash Journeyman
Joined
May 19, 2014
Messages
289
Yeah according to the spreadsheet there's whole sections of currently unknowns missing.
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Okay cool. I figured it was something like that but I just wanted to check to be safe.

Also Stratocaster, I've decided to take your advice and not start with just hit boxes, but instead support all of the events.
I think you're right that it would be the best approach.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
@ Achilles1515 Achilles1515 ,

Is there any way to use Magus' speed modification code in conjunction with the 20XX hack? In Start.dol there would be some overlap between your code and his if I were to inject the code where it is supposed to go (0x17A0). Can this code be injected somewhere else that will not cause troubles?

I was hoping that I would be able to keep this program fully compatible with the 20XX hack.
 

Achilles1515

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

Is there any way to use Magus' speed modification code in conjunction with the 20XX hack? In Start.dol there would be some overlap between your code and his if I were to inject the code where it is supposed to go (0x17A0). Can this code be injected somewhere else that will not cause troubles?

I was hoping that I would be able to keep this program fully compatible with the 20XX hack.
Magus's original DOL mod is for 1.00, not 1.02 which is the version 20XX is for.

But I've already done it.

Also.
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
I see, so I'll have to make it support either 1.00 or 1.02... and it seems 1.02 is the right choice.

That's fantastic that you've already ported it to 1.02. So that code will soon be implemented into the official release of 20XX then, correct? Would you be willing to elaborate a bit more on how that code is set up in the file so that I can set up my program to add that into non-20XX copies of 1.02 too?
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Hello everybody, I'm happy to announce that v1.1 of my program is now available:

Here is the download Link: MCAEdit v1.1





In this new version, you can now modify the subactions for every character. You can quickly and easily edit the various components of a character's moves, such as hitboxes, timers, and every other kind of event.
All of the events are displayed in the order that they appear in the game.

For hitboxes, every component is layed out and labeled. To modify, just change the values in the chart and hit save. Super simple.



There are still many things that are incomplete, or that I plan to add in the future:

1) Currently, most of the events do not have an intuitive layout like hitboxes. However, their exact hex values are displayed and can be modified. In the future I plan to add a layout similar to hitboxes for some of the more common events to make for easy editing.

2) Right now you can only edit the subactions for attacks. I'll soon make it so you can edit every subaction. That will be a super easy change, I just haven't done it yet.

3) In hitboxes, you can't currently edit the sound or hurtbox interaction. Those drop-down menus are just dummies right now. Every other field works though.

On top of these, I still have a whole host of other features I plan to add to the program in the future.






Lastly, I'd like to say huge thanks to everybody who has helped me so far with this program. Special thanks to @ Stratocaster Stratocaster who has given me incredible amounts of help on this project, and same for @ Achilles1515 Achilles1515 . Thanks for helping me make this project a reality guys.




If anybody has any questions/comments/requests/bug reports, please let me know. Thanks!
 

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
If you want to add the DOL frame speed modifiers I know Achilles has already given you some stuff to go by, but here's the function and stuff:

StartOffset := 0x4088B0

;1.02 FSM Injected Function (Magus/Achilles)
7F63DB788BE3006C3FA0804563BD30841FFF0E907FFDFA14809F00008BFF00082C0400134182001C2C04001240A200202C1F000140A2001838800013480000102C1F000140A2000838800012C03E0894FC20081ED822000080A2000480C3007080E3007460E780003FE0804063FFB9A887BF00082C1D00004182006057BC463E2C1C00FF418200147C1C20004182000C418100484BFFFFDC57BC863E7C1C280041A1FFD057BC043E7C1C30004182000C7C1C38004082FFBC839F00042C1CFFFF41820018C03F00043FE0800663FFF1907FE803A64E800021BB6100144BC679B00000000000000000000000000000000000000000000000000000000000000000

FSM entries begin at 0x4089b0 in the DOL (after this function)

and here's Magus post which should help you figure out how to make the individual modifiers:
http://smashboards.com/threads/melee-hacks-and-you-updated-1-7-11.247119/page-98#post-14773022

It'd be really neat if your program could account for the modifications in the code. If you put a timer at 10 and do a modifier to make it 2x speed, then the timer at 10 will go off at 5 instead. It'd be cool if in the program it showed up as 5 after you put in the modifier.

As you expand functionality into adding and subtracting data you'll need to know that go to and subroutine functions have pointers in them which I recall are absolute pointers. You'll have to program those to adjust accordingly to any changes. I hope you add the ability to swap animations and such too.

So far though so good! I'm very impressed by your progress in only a couple of weeks. In the coming months this thing is going to be a beast!
 

oksas

oak-sauce
Joined
Apr 12, 2011
Messages
458
this is amazing. can't wait for even more features. it might be worth adding something to the thread title like "CAN NOW EDIT HITBOXES HOLY ****" ;)
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Stratocaster,
I'm glad you're happy with my progress so far. And thanks for the info on FSM, I should be adding that soon. I think my to do list is going to be in this order:
-- Article floating point values for special moves (Just because that will be super easy... I can just recycle a lot of my code for attributes)
-- Frame Speed Modifiers
-- Animation swapping (also should be pretty easy)
-- Ability to change lengths of scripts. This may take longer to do which is why i'm saving it for last.
-- ???? Can't remember if I had anything more planned...


oksas,
That comment made me laugh harder than I probably should have haha. You do raise a good point though, I'll probably adjust the title soon.

And on a related note: I think I want to change the name of the program now that it does more than just change character attributes. Plus I never really liked the name I chose anyways... I just didn't have any good ideas and I needed to pick something. I thought of just dropping the "Attribute" and making it MCEdit but apparently there's already a minecraft program with that name.
Does anybody have any suggestions?
 
Last edited:

Doq

Smash Lord
Joined
Dec 28, 2012
Messages
1,037
Location
The Lab, Sweet Home, OR
And on a related note: I think I want to change the name of the program now that it does more than just change character attributes. Plus I never really liked the name I chose anyways... I just didn't have any good ideas and I needed to pick something. I thought of just dropping the "Attribute" and making it MCEdit but apparently there's already a minecraft program with that name.
Does anybody have any suggestions?
Should try following the other much larger scene and calling the program "MeleeBox", and consider merging programs/concepts of programs with the Melee Toolkit and the DAT Texture Wizard (and whatever other useful programs are floating around, hps_insert comes to mind)
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Hmm, interesting idea. That would be a pretty demanding task to merge all of those existing programs though, especially considering they were likely written in different languages.
 

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
My suggestion is SSBM CE or Melee CE (CE is character editor of course). I wouldn't worry about combining programs because I think those are written in C# or something and it's not a worthwhile task to combine them. Just do your thing.
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
@ Stratocaster Stratocaster ,

Do you have info on subaction offsets for the wireframe characters and giga bowser?
I'm also looking for info on the sound data in hitboxes, but I haven't looked very much yet.
 

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
All I have is a table I made which lists some particular ones. Its a very incomplete list.
I just made it from picking a bunch of hitboxes off the top of my head with sounds I thought were notable and then plugging them into an excel chart which would break down the bytes into the bits needed and then convert that into decimal so that they could be sorted numerically. Here's my list so far, but it's FAR from complete. I could perhaps write a script that goes and picks out every used sound in the game and where its used, but it'd take me a few weeks to get around to that. Anyway here's what I have on hand:

L/F F F/T LLFF FFFF FFTT Bin (FFFFFFFF) Dec Description

0 0B 00000000 00001011 00000010 2 Falcon Weak Knee
0 0F 00000000 00001111 00000011 3 Marth Weak Jab
0 33 00000000 00110011 00001100 12 Peach's Racket
0 87 00000000 10000111 00100001 33 Fox, Dair, Peach Dair
0 8B 00000000 10001011 00100010 34 Falcon Uair, Mewtwo Bair, Uair, Sheik Dtilt, Fox 2nd hit Uair
0 8F 00000000 10001111 00100011 35 Marth Weak Fair, SS Jab, Roy's weak jab
0 B3 00000000 10110011 00101100 44 Peach's Club
1 07 00000001 00000111 01000001 65 Peach Fair, Luigi Fair, Fox 1st hit Uair
1 0B 00000001 00001011 01000010 66 Falcon SS Knee, Falcon Stomp, Peach's Dsmash, Nair, Bair, Uair
1 0F 00000001 00001111 01000011 67 Marth SS Fair, SS Uair, weak dair, nair, Mewtwo Fair
1 17 00000001 00010111 01000101 69 Puff's Rest, Luigi's Up B SS
1 23 00000001 00100011 01001000 72 Fox/Falco shine, Marth Tipper FSmash, Marth's SS dair, Doc Fsmash, Samus Fair
1 33 00000001 00110011 01001100 76 Peach's Pan


If you wanted a complete list and you wanted to collect each sound. You would need to use debug dolphin, pick a character and a hitbox. Go in game with that character and search for the hitbox in memory, then replace the appropriate bytes in memory with 1,2,3, sd fx and hit someone until something crashes or you don't hear anything. You'd want to choose a move with no sound fx of its own or remove its sound fx. Then you just record the audio... something like that anyway.

You'd need to replace the bytes in hex though and and it counts weird because its bit-shifted. You'd actually count:
_0 07, _0 0B, _0 0F, _0 13, _0 17, _0 1B, etc. just counting up 7,B,F,3 each time.

Otherwise I'm not sure how you'd name the sound effects, but I don't know if you can build them into your program or not. A reference could be made at least, which would be nice.

Edit: I posted an Excel table into smashboards and it didn't turn out well, but I hope its legible.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Ahh, I see. I was really hoping there'd be a complete list already compiled. I suppose I could also do what you were saying and just scan for every sound that is used, but that would be pretty tedious, and also difficult to name them all. For the time being I think I will just change the sounds in my program from a drop down list into a text field for simplicity. Maybe somewhere down the line I will improve it though.

And unless I just missed it, I don't think you responded about the wireframe/giga bowser subactions
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
Hey man, first off I'd like to say great work on this program c:

I'd love to help out with the code/GUI if that's alright with you. I won't lie, I'm fairly new to working with hex/binary in java(I was actually trying to make a hitbox editor after seeing V1.0, only to find V1.1 after working on the hitbox editor for a few hours haha) but I think I can offer some help. I took a look at the source code and right now I have a theory about the organization of special moves and how they might be able to be accessed conveniently. I'll get back to you on that in a little while.

Keep up the good work!
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Hi Tatar,

I'm glad to hear you're interested in helping out. So do you have any experience with using Swing? And also how comfortable are you with Java?

If you'd like to take a whack at the special move values then be my guest. That will certainly lighten my load. If you'd want to get working on that, I can start working on the frame speed modifiers.


And yeah, I completely understand if you're new to these concepts. This program was my very first time using Swing and also my first time reading writing hex files. I'm just learning as I go haha.
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
I don't have much experience using Swing, but I'm a quick learner. Java is my language of choice and I've been programming as a hobby for the past four years(And I've started putting real work into game development in the past couple months, but I don't think that's relevant for this project).


The quick-and-lazy theory I had for identifying each individual character's special moves didn't pan out, but I've started mapping them out and it's going smoothly.

Due to the varying nature of each characters special moves(Differing amounts of entries between neutral and side specials based on what they do, kirby having his own version of EVERY neutral special in the game in his file, etc) I went ahead and made a separate menu choice for them as pictured below:



If this doesn't fit with the design you had in mind I can go ahead and migrate the code so it's all in the subactions section.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Sounds like you and I have quite a bit in common then haha. I've been programming seriously for about 4 years or so too. I say "seriously" because when I was much younger I messed around with programming but never really got anywhere.
For the most part I've programmed in Java for my hobby projects and in C++ for my academic programming (I'm a Computer Engineering student). And I too have done quite of a bit of game programming, I have about a dozen half-finished games... I've only ever released one.




But anyways:
Yeah, I was planning to have the special moves as its own drop-down menu as well. In fact I think I still have that commented out in the declaration. I don't think those would fit well into the subactions menu.
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
How does the number of jumps work?
I wish I knew... It seems like setting it to anything other than default results in infinite jumps. I think I remember Internet Explorer saying that the value for the actual number of jumps is likely stored somewhere else in the code but I don't know for sure. Somebody else might be able to give you a better answer.


how do I edit IASA so I can cancel anything really fast like turbo mode
Towards the end of most move subactions you will see "Allow Interrupt (IASA)". The first timer that precedes this line is the timer that will influence when IASA begins.
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
I wish I knew... It seems like setting it to anything other than default results in infinite jumps. I think I remember Internet Explorer saying that the value for the actual number of jumps is likely stored somewhere else in the code but I don't know for sure. Somebody else might be able to give you a better answer.
Definitely stored elsewhere in the code. Jigglypuff has entries in her subactions labeled JumpAerialF1 ~ F5, and F1~F4 have a sound effect, 28 frame timer, and autocancel whereas F5(Her final jump) just has a sound effect.

Fun fact: if you have infinite jumps, you can also jump out of special fall for some reason.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
What are the names of the tilts?
This is copy.pasted from a PM I sent somebody but this should get you started on all of the names:

if it has "1" in it, it's a jab.
Attack11 - jab1
Attack12 - jab2
Attack100 - these are used for rapid jab


if it has "3" in it, it's a tilt.
AttackS3HI - uptilt
AttackS3Lw - downtilt

forward tilt is weird because in the game you can angle it in up to five directions: diagonal up,slightly diagonal up, straight forward, slightly diagonal down or diagonal down. For this reason there are five subactions for forward tilt. However, not every character is capable of changing the angle for this, so some characters will only have data in AttackS3S.

if it has "4" in it, it's a smash attack.
Attack4Hi - upsmash

Forward smash is just like forward tilt, so there are 5 subactions again.

I believe Attack4hold has to do with charging the smash attack, but it appears to be empty...





Hope that helps. In the next update of my program I'll be giving them more intuitive names. I've actually already updated that but I just haven't released it yet.
 
Last edited:

CeLL

Smash Lord
Joined
Jan 26, 2014
Messages
1,026
Location
Washington
This is copy.pasted from a PM I sent somebody but this should get you started on all of the names:

if it has "1" in it, it's a jab.
Attack11 - jab1
Attack12 - jab2
Attack100 - these are used for rapid jab


if it has "3" in it, it's a tilt.
AttackS3HI - uptilt
AttackS3Lw - downtilt

forward tilt is weird because in the game you can angle it in up to five directions: diagonal up,slightly diagonal up, straight forward, slightly diagonal down or diagonal down. For this reason there are five subactions for forward tilt. However, not every character is capable of changing the angle for this, so some characters will only have data in AttackS3S.

if it has "4" in it, it's a smash attack.
Attack4Hi - upsmash

Forward smash is just like forward tilt, so there are 5 subactions again.

I believe Attack4hold has to do with charging the smash attack, but it appears to be empty...





Hope that helps. In the next update of my program I'll be giving them more intuitive names. I've actually already updated that but I just haven't released it yet.
I'd keep the original names but put the more common ones in the description.
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
I'd keep the original names but put the more common ones in the description.
The next update will be set up with two seperate subactions choices:
Subactions (Attacks Only) and Subactions (All)

in the "attacks only" menu they will be labeled more intuitively, but in the "all" menu they will be named as they appear.
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
In case you wanted to make changing the smash attack stuff in an easier format, quoting Itaru:

E0XXYYYY ZZ000000
This is smash charge format.
You can use this format for all A button attacks!

X means "Character can charge X frames"
Y is "Damage rate of increase"
Z is "Charge Smash Effect"
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Nice, I can add that into the next update as well. is rate of increase a float?
Edit: I guess it probably wouldn't be a float since it's only 16 bits.


I was also hoping somebody could give a little bit of clarification on the terminology we use for the various things of melee:

So for example, "AttackLw4" is a subaction, right?
Is there such a thing is an "action" that a subaction comes from?
And for another example, "Asynchronous Timer" is an event, right?
Is a "script" the whole set of events within a subaction?
 
Last edited:

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
Nice, I can add that into the next update as well. is rate of increase a float?
Edit: I guess it probably wouldn't be a float since it's only 16 bits.


I was also hoping somebody could give a little bit of clarification on the terminology we use for the various things of melee:

So for example, "AttackLw4" is a subaction, right?
Is there such a thing is an "action" that a subaction comes from?
And for another example, "Asynchronous Timer" is an event, right?
Is a "script" the whole set of events within a subaction?
Magus has kind of made these definitions afaik. There are actions and subactions, but they can overlap. I think it works that, for instance, AttackLw4 is an action with only 1 subaction which is we also call AttackLw4. An example of an action with multiple subactions is Wait, which has the subactions Wait1 and Wait2. I don't know how exactly actions are coded but I believe they are the same for every character outside of some Specials. Magus420 includes a list of all the action IDs in his post about the FSM, but I don't how he came up with it or how to do anything like change the subactions in an action. I'm mostly sure this is accurate, but I don't know a ton about actions.

An asynchronous timer is an event according to the wiki and yes the whole set of events is a script. I had been calling events functions for some time now, which IMO is a more accurate name because a timer doesn't make since to an event since it more determines when an event takes place. Instead it is a function that says like "wait x frames until executing next function." The terms are mostly made up by us anyway and the term "event" is not widely used afaik.
 
Last edited:
Top Bottom