• 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
Hello everybody.

This is Crazy Hand. It is a character editing program for Melee that allows you to quickly and easily edit things such as character attributes, hitboxes, subactions, and more.




























The program is now pretty self explanatory. All you need to do is acquire a melee ISO and open it with Crazy Hand. From there, edit whatever you want and press save when done.

Please note! Crazy Hand is a java program, meaning that it is a .JAR file instead of a .EXE file. double click it just like you would any other executable file to run the program. If you have a program like WinRAR installed on your computer, double clicking it may try to open it as an archive file. You don't want this, so instead right click it >> Open with >> Java Platform Binary. This may vary slightly by operating system, but the general process is the same.

The entire project is open source and code is being maintained on GitHub. If you would like to take a look at it and potentially contribute, here's the link to our page: Crazy Hand GitHub

Huge thanks to Tater and darkside1222 for the code that they have both contributed to this project.
In addition I'd like to say major thanks to everybody else who has supported us on this project so far. This includes, but is not limited to Stratocaster, Achilles1515, DRGN, Magus, Itaru, LanceInThePants...
You guys have all been incredible help to me on this project. Not all of you directly helped me, but the amount of research and documentation that I read from many of you has just been unbelievably helpful. I would be nowhere without you guys. You rock!


Here is the download link: Crazy Hand v1.31

If you have any questions/comments/bug reports, please feel free to let us know.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
[LINK #1]
[LINK #2]

Where does these go to?
Sorry, links should be up shortly. This is a brand new smashboards account so I am currently not able to post links (need to have 10 posts total). I talked with achilles and he said he'd update this post soon and add in the links.Sorry about that.
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
So I'm not too into editing characters at the moment, but have you put any thought into adding the as well?

Also, I know @ Stratocaster Stratocaster was working on something similar to this, but haven't heard anything from him in a bit.

Interesting, I'll definitely consider adding that into my program at some point in time. What I'd really like to work on for the next main feature though is standard move hitbox data, but I'm a bit lost. I've read Magus' post on hitboxes (which I can't post a link to still... but it's in a stickied post) and I understand how they can be modified, but as far as I can tell Magus only gave an incomplete list of move hitboxes and no indication on how to find the remaining ones. Anybody know how I might find the rest?

I may contact the creator(s) of the SD Remix to see if they'd be willing to explain some things.
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Interesting, I'll definitely consider adding that into my program at some point in time. What I'd really like to work on for the next main feature though is standard move hitbox data, but I'm a bit lost. I've read Magus' post on hitboxes (which I can't post a link to still... but it's in a stickied post) and I understand how they can be modified, but as far as I can tell Magus only gave an incomplete list of move hitboxes and no indication on how to find the remaining ones. Anybody know how I might find the rest?

I may contact the creator(s) of the SD Remix to see if they'd be willing to explain some things.
There are certainly pointers to the start of those subaction events, but I haven't looked into it. So I can't tell you exactly. If you want to find a specific move though, open up the dat in Masterhand, look at the hitbox data of a move, copy the hex string, and then search for it in the dat.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
There are certainly pointers to the start of those subaction events, but I haven't looked into it. So I can't tell you exactly. If you want to find a specific move though, open up the dat in Masterhand, look at the hitbox data of a move, copy the hex string, and then search for it in the dat.
Alright, thanks for the input. I'll take a look at MasterHand and try to learn a bit. I really appreciate all the help you've been giving me, Achilles.
 

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
I've made a similar thing but I'm not much of a programmer (experience-wise). I happen to know a scripting language (Autohotkey) and I've made it take apart and put together everything. It works for attributes really well but it's relatively jank. It puts all the attributes into a text doc for each character and then you edit those txt's and run a script and it compiles it back into the .dats. That is the easy part though. I completed that in like a day's time. Then I tried adding functionality to edit subactions and scripts and it works 95% of the time, but I can't figure out why my script messes up some things here and there. Well I know some issues but I don't know how to solve it. For example: I messed with Sheik's hitbox angles the other day than after compiling it and playing it the changes I made were correct but dash attack's hitbox (which I didn't touch) was completely missing. I'm kind of frustrated with it so I've taken a step back from it.

Anyway, I know as much as anyone knows about the data structure of those files. If you want me to explain how to edit hitboxes I can do that, but just know it's not near as straightforward as attribute editing. You have to use a pointer to the subaction list (a subaction is anything like Wait, AttackAirLw, etc.) which has pointers to the animation, script, and other stuff for that subaction. Than you can point to the scripts which outline everything that happens in each move in a list of commands. I have info on pretty much every command (though some seem to do nothing). The scripts include the hitbox commands which themselves require a little interpretation. I can explain this all in detail and give you all the offsets you would need if you want.

There is a list of every hitbox in the game if you want that (there's an excel file) and you could write your code to just overwrite those, but it wouldn't work with every version of the game (the ones we have are v1.0). That would be the lame, easier way, but the reward is greater for doing it the more difficult way because being able to edit everything about the scripts is much more powerful.

Also incorporating frame-speed modifiers would be cool. I already have a script that can do this, but a real program would be better. It would be relatively easy. I have a pretty full knowledge on character editing so feel free to ask me anything especially since I really wanted to make what you're making (and kind of have but again it only mostly works and is kind of jank because of my programming limitations).
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
I've made a similar thing but I'm not much of a programmer (experience-wise). I happen to know a scripting language (Autohotkey) and I've made it take apart and put together everything. It works for attributes really well but it's relatively jank. It puts all the attributes into a text doc for each character and then you edit those txt's and run a script and it compiles it back into the .dats. That is the easy part though. I completed that in like a day's time. Then I tried adding functionality to edit subactions and scripts and it works 95% of the time, but I can't figure out why my script messes up some things here and there. Well I know some issues but I don't know how to solve it. For example: I messed with Sheik's hitbox angles the other day than after compiling it and playing it the changes I made were correct but dash attack's hitbox (which I didn't touch) was completely missing. I'm kind of frustrated with it so I've taken a step back from it.

Anyway, I know as much as anyone knows about the data structure of those files. If you want me to explain how to edit hitboxes I can do that, but just know it's not near as straightforward as attribute editing. You have to use a pointer to the subaction list (a subaction is anything like Wait, AttackAirLw, etc.) which has pointers to the animation, script, and other stuff for that subaction. Than you can point to the scripts which outline everything that happens in each move in a list of commands. I have info on pretty much every command (though some seem to do nothing). The scripts include the hitbox commands which themselves require a little interpretation. I can explain this all in detail and give you all the offsets you would need if you want.

There is a list of every hitbox in the game if you want that (there's an excel file) and you could write your code to just overwrite those, but it wouldn't work with every version of the game (the ones we have are v1.0). That would be the lame, easier way, but the reward is greater for doing it the more difficult way because being able to edit everything about the scripts is much more powerful.

Also incorporating frame-speed modifiers would be cool. I already have a script that can do this, but a real program would be better. It would be relatively easy. I have a pretty full knowledge on character editing so feel free to ask me anything especially since I really wanted to make what you're making (and kind of have but again it only mostly works and is kind of jank because of my programming limitations).

That's fantastic. If it is okay by you, I'll probably be PMing you today or tomorrow to pick your brain a bit. But ya know... school comes first haha.
 

DRGN

Technowizard
Moderator
Premium
Joined
Aug 20, 2005
Messages
2,175
Location
Sacramento, CA
Ha. Cool, someone finally made this. One of the first programs I thought about making was a new rendition of the Master Hand tool with the ability to read as well as write (so basically this lol). Nice to see another programmer for Melee.

I've made a similar thing but I'm not much of a programmer (experience-wise). I happen to know a scripting language (Autohotkey) and I've made it take apart and put together everything. It works for attributes really well but it's relatively jank. It puts all the attributes into a text doc for each character and then you edit those txt's and run a script and it compiles it back into the .dats. That is the easy part though. I completed that in like a day's time. Then I tried adding functionality to edit subactions and scripts and it works 95% of the time, but I can't figure out why my script messes up some things here and there. Well I know some issues but I don't know how to solve it. For example: I messed with Sheik's hitbox angles the other day than after compiling it and playing it the changes I made were correct but dash attack's hitbox (which I didn't touch) was completely missing. I'm kind of frustrated with it so I've taken a step back from it.

Anyway, I know as much as anyone knows about the data structure of those files. If you want me to explain how to edit hitboxes I can do that, but just know it's not near as straightforward as attribute editing. You have to use a pointer to the subaction list (a subaction is anything like Wait, AttackAirLw, etc.) which has pointers to the animation, script, and other stuff for that subaction. Than you can point to the scripts which outline everything that happens in each move in a list of commands. I have info on pretty much every command (though some seem to do nothing). The scripts include the hitbox commands which themselves require a little interpretation. I can explain this all in detail and give you all the offsets you would need if you want.

There is a list of every hitbox in the game if you want that (there's an excel file) and you could write your code to just overwrite those, but it wouldn't work with every version of the game (the ones we have are v1.0). That would be the lame, easier way, but the reward is greater for doing it the more difficult way because being able to edit everything about the scripts is much more powerful.

Also incorporating frame-speed modifiers would be cool. I already have a script that can do this, but a real program would be better. It would be relatively easy. I have a pretty full knowledge on character editing so feel free to ask me anything especially since I really wanted to make what you're making (and kind of have but again it only mostly works and is kind of jank because of my programming limitations).
If you guys talk more about the specifics, are you going to do it here or create a thread for it? If it's not public (IMs), could I be added to the conversation? I figure if there might be information not easily found elsewhere I'd be interested to sit-in. Also, we both know how awesome AHK can be with its unique abilities, but I've also experienced some inconsistency with it in the past. If you ever want to try Python or another language to build full programs with I would be willing to help you get started. You probably wouldn't have problem with the logic aspect of code writing, so a lot of the hassle would actually be learning how to set things up (installing the language, initializing modules, choosing a gui package, compiling), which I've already gone through, and beyond that it would just be learning the syntax, which doesn't take too long with google. I'm confident you could do it, it would just be something new is all.

Can you upload this? Where did you get it??
I'm not sure if it's still online because I can't find it, but I have a copy at home that I can upload later if Stratocaster doesn't have a link.
 

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
Here is a link to the file in my dropbox.

If it's cool with Ampers I think having discussion open here would be good. I know 90% of what I know is me reading discussions on here that weren't originally directed at me. It's good to have it available for people.

DRGN I would be interested in learning a full language. I think I'd be capable since I aced Matlab and have a knack for the logic and programming stuff, but I've had trouble getting into it because I don't understand the parts you've described. I'm not sure whether I want to or can commit the time to learning a programming language though. AHK definitely has it's limitations. I basically go in and take apart all the data have to piece it back together.
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Alright, then let the discussion begin:

So there are a few major features I'd like to eventually add into the program, some of which I may need help on. Here are the ones I can think of:

-Hitbox editing

-Special move editing

-Frame speed editing


After tinkering with MasterHand for a while, I think I've figured out enough about hitboxes to know how to edit them and add them into the program. I guess it will now just be a tedious process of locating the offset values for each hitbox. Stratocaster, I don't really know how to use that table effectively. Those numbers there are as shown on the Dolphin Debug screen, right? The work I've done so far has been in the .dat files. Since I'm modifying directly to those files, all I need is the start location for that hitbox's data and what it is, then from there I can extract the necessary info straight from the .dat file (ex. Pikachu: 39AC - Uptilt hitbox #1 or something like that).

Special Move Editing shouldn't be too hard to add if I just base it off of the table Achilles' linked previously in this thread.
However there seems to be a lot of grey area there where values don't seem to be known. Is there any way this info could be found?

I know next to nothing about how one would adjust things like speed of move animations, but I'd love to be able to add that to the program. I've looked in master hand and seen things like Synchronous and Asynchronous timers that influence when a hitbox comes out, but they don't seem to do anything to the speed of the animation itself. Anybody know more about?
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Also, DRGN and Stratocaster:

How would you guys feel about collaborating with me on this program I've already started? I think I'm a competent enough coder that I would be able to write the whole engine for the program. I'd handle all of the coding things like file reading/writing and setting up the GUI.

If either of you (or anybody else who'd like to join as well for that matter) would like to help me compile information for the project, that would be incredible.

I hope I'm not coming across as a control freak or anything, I guess I just have a vision in my mind of what I want this project to become. I mean you guys have been here much longer than I and are definitely my superiors.
 

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
Ampers I have literally all of the information you need already. It'll take me a while to communicate it though. Using the hitbox locations is the wrong approach. You can find them all without having to know every single offset for each of them individually, and in doing so you can have a more powerful program. I'll supply the offsets and logic you need to do the coding, but give me some time to get that together. Tomorrow I'll begin explaining everything.
 

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
Ok to start you need to understand subactions and scripts.

A subaction is a combination of pointers and flags that determine what will occur under a set of circumstances which have been predetermined by the game's engine. For instance if you press A than the subaction in the location where "Attack11" If you've seen Masterhand you already have a good idea as all of those lists on the left under the subaction tab are the list of subactions. In the game's code what it looks like is 6 sets of 8 digits repeated for however many subactions that character has. They follow in a set order with special moves added onto the end.

Here's a list of the subactions (excluding specials).

Here is Fox's dash attack subaction and what it means.
In the game you will find:
0000073c000343800000203a000046a08000000100000000

Before I move on one thing worth noting is that the header to a dat file is 0x20 long. Which means offsets given within the game's code are 0x20 off from what the offset will be in your hex editor. That is:
Offset within game + 0x20 = Offset in hex editor
Or in other words add 0x20 to any offsets that you find in the game to find the actual location you are interested in using within the file since the game doesn't count the header.
Also in case you don't know "0x" means it is a hexadecimal number and not 20 but rather 32.

Here's the break down:
0000073c 1. String Offset
This one identifies the offset of the string used. In this case it points to AttackDash. Changing this is pointless as it doesn't have any effect on gameplay but it is useful as an identifier. You can use it to pull from the dat the name of the subaction so that you don't have to have all of that programmed in individually.

00034380 2. Animation Offset
This is a pointer to a location in the animation file. Swapping this with another one will swap the animations so you can make an item throwing animation into an attack or switch the animations for a smash and tilt.
0000203a 3. Unknown Offset
This doesn't seem to point to anywhere within the dat. I think it should be tied to the animation offset, but I don't think anyone knows exactly what this one does. I would just make it so that if you change the animation than you change this as well.

000046a0 4. Script Offset
This is a pointer to the script that is enacted which includes your state (invincibility), hitboxes, IASA frames, and has timers to indicate when these things start and finish. Flipping these generally works but is sloppy. This offset is useful for determining the location of the script and because if you want to add or subtract from scripts rather than change them then you will need to adjust these to match since the scripts are listed back-to-back. (More on this later)

80000001 5. Character ID and positional flag
This one is not an offset, but has two flags. The one at the end (01 in this case). Is the Character ID flag. For Fox it will always be 1. I think changing this will freeze, but maybe if you change it to Falco it will go to Falco's animations and offsets instead? I haven't really messed with it but that's what it is. The early flag (80 in this case) has to do with your position after the attack. It is usually 00 which means that after the subaction your position has not changed. If you changed this to 00 than after Fox did his dash attack then he would teleport back to where he started rather than staying where he finished it. I think there is in rare cases a use for changing. The only time I've changed it is when I wanted to switch a move from Marth's side B to one of his regular attacks. He moved a little in his side B where he didn't before and so not switching it made him teleport back awkwardly. As for what the actual value means, I'm not exactly sure.

00000000 6. SubAction End
This just indicates the end of the subaction. It should always be just 0's

I will include a list of where every character's subactions are soon. Here's a start so you can look at it.
Fox (ID 01): 0x00773C - 0x0095E4

Note that I have already added 0x20 for you here.

Ok that's enough for me atm. Next I will add the rest of the characters and go over scripts in detail next. Please ask any questions you have up to this point.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Okay, I think I'm following. Quick question though:

So each subaction is going to have exactly 6 sets of 8 digits then? So then does that mean if you're looking for a specific subaction of a character you can just skip that many spaces ahead to find it? So for instance you gave fox's first subaction as 0x00773C. Let's say for example I'm looking for his 9th subaction (assuming it starts on the 0th subaction for this example), can I just skip ahead (9 subactions)x(6 sets)x(8 digits) ahead to find that subaction? I know that's not exactly how it would work on in a program since it works in bytes, not hex digits but I think that should be the right principle, right?

And I just want to thank you yet again for how much you and everybody else has been helping me out. This seems like a really great community.
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Great post! This is some informative stuff. For that one unknown pointer, we might be able to figure out it’s purpose by finding it in the RAM and following what it points to (if it is for something outside of the DAT).

Flipping these generally works but is sloppy.
What do you mean by sloppy? I’m guessing you mean like if you swapped the shine action events with a different action, it wouldn’t invoke the shine graphic to appear on-screen. Or the whole idea of interrupts for specific actions and stuff.
 
Last edited:

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
Okay, I think I'm following. Quick question though:

So each subaction is going to have exactly 6 sets of 8 digits then? So then does that mean if you're looking for a specific subaction of a character you can just skip that many spaces ahead to find it? So for instance you gave fox's first subaction as 0x00773C. Let's say for example I'm looking for his 9th subaction (assuming it starts on the 0th subaction for this example), can I just skip ahead (9 subactions)x(6 sets)x(8 digits) ahead to find that subaction? I know that's not exactly how it would work on in a program since it works in bytes, not hex digits but I think that should be the right principle, right?

And I just want to thank you yet again for how much you and everybody else has been helping me out. This seems like a really great community.
Yes you can find any subaction by:
Subaction start offset + (N * 4 * 6) = Subaction N offset
Where N is the subaction number starting at 0 (which is how it starts in game as well), 4 is the number of bytes per set, and there are 6 sets in each subaction.

I've wanted a program to make modding easier for a long time so I'm more than happy to help.

Great post! This is some informative stuff. For that one unknown pointer, we might be able to figure out it’s purpose by finding it in the RAM and following what it points to (if it is for something outside of the DAT).

What do you mean by sloppy? I’m guessing you mean like if you swapped the shine action events with a different action, it wouldn’t invoke the shine graphic to appear on-screen. Or the whole idea of interrupts for specific actions and stuff.
That's a good point. It may be worthwhile to try to figure out what it's for. I actually thought I figured it out at one point and wrote it down but lost it. I'm not sure though if that's true though. Doesn't matter now anyway.

I mean sloppy like if you swap Fox's Jab script with his USmash script you'd get hitboxes coming out on his feet at a weird time. Basically I mean scripts are not easily compatible with an animation it was not intended for.
 

DRGN

Technowizard
Moderator
Premium
Joined
Aug 20, 2005
Messages
2,175
Location
Sacramento, CA
Here is a link to the file in my dropbox.

If it's cool with Ampers I think having discussion open here would be good. I know 90% of what I know is me reading discussions on here that weren't originally directed at me. It's good to have it available for people.

DRGN I would be interested in learning a full language. I think I'd be capable since I aced Matlab and have a knack for the logic and programming stuff, but I've had trouble getting into it because I don't understand the parts you've described. I'm not sure whether I want to or can commit the time to learning a programming language though. AHK definitely has it's limitations. I basically go in and take apart all the data have to piece it back together.
Alright. I'll send you some links later. If you happen to find yourself with the interest & time at some point, you'll have something you could try starting from. I'm thinking Python 2.7.x for the program concepts you've shown interest in before. I've written programs in many languages, and Python has a great mix of power with user friendliness. It's a nice clean syntax which is easy to read & write like JavaScript, and doesn't need any big, bulky (or expensive) development tools, like VBasic with Visual Studio for example. For another thing, it's used in a lot of corporate development settings, and so also looks good on a resume.

Although, if you collaborate with Ampers on this program, then even just seeing the details you've described, as he puts it into code form, would probably be a good way to learn code structuring without having to do much, since you could follow the code with the logic of what it's trying to do already in mind. If you'd want to do your own program in that instead (Java), then he could share what he did to install, compile, etc. And then of course you'd be able to add to the program he's making.

Also, DRGN and Stratocaster:

How would you guys feel about collaborating with me on this program I've already started? I think I'm a competent enough coder that I would be able to write the whole engine for the program. I'd handle all of the coding things like file reading/writing and setting up the GUI.

If either of you (or anybody else who'd like to join as well for that matter) would like to help me compile information for the project, that would be incredible.

I hope I'm not coming across as a control freak or anything, I guess I just have a vision in my mind of what I want this project to become. I mean you guys have been here much longer than I and are definitely my superiors.
Sorry, but I've already got multiple things lined up for me to work on. I need like 5 more of myself so I can do everything, haha. I'm already kinda working on two things at once when I have free time.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Stratocaster, when you get a chance could you explain how one would traverse the values that the script offset points to?
 
Last edited:

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
Ok, the info achilles linked isn't bad, but I think it is missing some important things you'll need to know and could use some context.

Each character's dat has a section that is laid out like so:

Special move scripts
Special move floating points
Standard scripts

These are all back-to-back. In fact, scripts themselves are back-to-back. This causes issues with adding or removing portions of them as if you want to add you'll be overwriting the next script.

Just for clarification. A script is like a sequencing of events that uses synchronous (relative) and asynchronous (absolute) timers to detail exactly when these events will happen. For example:

Asynchronous timer - 10
Hitbox
Synchronous timer - 5
Remove Hitbox

This will make a hitbox appear on frame 10 of the subaction and then be removed on frame 15. In hex it would look like:
0800000A
2CXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
04000005
40000000
00000000

There are a couple things I want you to note that you won't see in those other links. For one, every script's end is signified by the 00000000 command. Next, every command is a multiple of 4 bytes (or 8 digits). This is very helpful in determining where the next command should start. Every command has a certain amount of bytes. So by identifying the command you can determine whether the next command starts in 4 bytes or 8 bytes or 20 bytes. By far most commands are only 4 bytes, but that "Events" list that achilles provided tells the lengths. It's also worth noting that the command ID is actually the first 6 bits and not the first byte, which means sometimes the last two bits will not be 00 and change the first byte. The most command examples of this are Hitboxes which are often 2D instead of 2C and Graphic effects which are often 29 instead of 28. You will have to watch out of that.

In order to change the length of the scripts (which you definitely will want to do), you must tie the script offsets in the subactions to the beginning of the script, if you add a line to a script you will have to move all of them down which follow afterwards. There is some free space left after every character's scripts which can be used, but you will have to place a limiter on how many lines can be added (though as long as no one goes crazy with it, there is plenty of free space). Unfortunately because special moves run into the floating points you cannot add to them without running into these values which would be very difficult to relocate. Achilles could probably figure out how... Your alternative solutions are to move some of the last special move(s) scripts to the end to free up space for the others or you could put in pointers which make the script jump over to some empty space where you'd put your extension and jump back, but I'm getting ahead of myself... just something to consider. It kind of messed me up when I got there. Anyway you may hit some specific issues with a couple of these, but these should get you started.

Here's are the vital offsets you may need. I'm going to copy-paste from my program's txt files 5 offsets. The first 1 is the offset where the other 4 are located. So you can use the first 1 to point to the next 4 or just use the second 4 directly if you want to skip a step. Add 0x20 to use these.

Bowser:
OffsetIndex_0x009ab4
AttributeStart_0x003624
AttributeEnd_0x0037a8
SubactionStart_0x007b40
SubactionEnd_0x0098e0

Captain Falcon:
OffsetIndex_0x009a04
AttributeStart_0x003754
AttributeEnd_0x0038d8
SubactionStart_0x007a98
SubactionEnd_0x009868

Doctor Mario:
OffsetIndex_0x009148
AttributeStart_0x003520
AttributeEnd_0x0036a4
SubactionStart_0x007264
SubactionEnd_0x008ecc

Donkey Kong:
OffsetIndex_0x009fa8
AttributeStart_0x003990
AttributeEnd_0x003b14
SubactionStart_0x007e78
SubactionEnd_0x009e10

Falco:
OffsetIndex_0x0099d8
AttributeStart_0x0037c4
AttributeEnd_0x003948
SubactionStart_0x007804
SubactionEnd_0x0096ac

Fox:
OffsetIndex_0x0098f4
AttributeStart_0x0036f4
AttributeEnd_0x003878
SubactionStart_0x00771c
SubactionEnd_0x0095c4

Game and Watch:
OffsetIndex_0x009F1C
AttributeStart_0x0035f4
AttributeEnd_0x003778
SubactionStart_0x007c58
SubactionEnd_0x009aa0

Ganondorf:
OffsetIndex_0x0095a8
AttributeStart_0x0036fc
AttributeEnd_0x003880
SubactionStart_0x0075f0
SubactionEnd_0x0093c0

Jigglypuff:
OffsetIndex_0x009094
AttributeStart_0x00389c
AttributeEnd_0x003a20
SubactionStart_0x006f3c
SubactionEnd_0x008de4

Kirby:
OffsetIndex_0x00E250
AttributeStart_0x004cc8
AttributeEnd_0x004e6c
SubactionStart_0x00b280
SubactionEnd_0x00df68

Link:
OffsetIndex_0x009EDC
AttributeStart_0x0033dc
AttributeEnd_0x003560
SubactionStart_0x007d90
SubactionEnd_0x009b00

Luigi:
OffsetIndex_0x008e88
AttributeStart_0x003380
AttributeEnd_0x003504
SubactionStart_0x006f40
SubactionEnd_0x008c80

Mario:
OffsetIndex_0x008de4
AttributeStart_0x0032b8
AttributeEnd_0x00343c
SubactionStart_0x006f20
SubactionEnd_0x008b88

Marth:
OffsetIndex_0x009d6c
AttributeStart_0x003724
AttributeEnd_0x0038a8
SubactionStart_0x007cf0
SubactionEnd_0x009b98

Mewtwo:
OffsetIndex_0x0095ac
AttributeStart_0x003730
AttributeEnd_0x0038b4
SubactionStart_0x0075a0
SubactionEnd_0x009310

Nana:
OffsetIndex_0x006D84
AttributeStart_0x001168
AttributeEnd_0x0012ec
SubactionStart_0x004d30
SubactionEnd_0x006b48

Ness:
OffsetIndex_0x00995c
AttributeStart_0x0034c0
AttributeEnd_0x003644
SubactionStart_0x007674
SubactionEnd_0x009504

Peach:
OffsetIndex_0x00b37c
AttributeStart_0x003874
AttributeEnd_0x003a1c
SubactionStart_0x008680
SubactionEnd_0x00a450

Pichu:
OffsetIndex_0x009600
AttributeStart_0x003434
AttributeEnd_0x0035b8
SubactionStart_0x0075c8
SubactionEnd_0x0093c8

Pikachu:
OffsetIndex_0x00962c
AttributeStart_0x003564
AttributeEnd_0x0036e8
SubactionStart_0x0075f4
SubactionEnd_0x0093f4

Popo:
OffsetIndex_0x008FEC
AttributeStart_0x003284
AttributeEnd_0x003408
SubactionStart_0x006f98
SubactionEnd_0x008db0

Roy:
OffsetIndex_0x00a094
AttributeStart_0x00387c
AttributeEnd_0x003a00
SubactionStart_0x00800c
SubactionEnd_0x009eb4

Samus:
OffsetIndex_0x009A7C
AttributeStart_0x003464
AttributeEnd_0x0035e8
SubactionStart_0x0079a8
SubactionEnd_0x009700

Shiek:
OffsetIndex_0x0094a4
AttributeStart_0x0033f8
AttributeEnd_0x00357c
SubactionStart_0x007420
SubactionEnd_0x0091d8

Yoshi:
OffsetIndex_0x009318
AttributeStart_0x00333c
AttributeEnd_0x0034c0
SubactionStart_0x007320
SubactionEnd_0x009090

Young Link:
OffsetIndex_0x00A2D0
AttributeStart_0x003580
AttributeEnd_0x003704
SubactionStart_0x00813c
SubactionEnd_0x009eac

Zelda:
OffsetIndex_0x00a120
AttributeStart_0x0037d4
AttributeEnd_0x003958
SubactionStart_0x007cc8
SubactionEnd_0x0099f0
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
While writing your program, it would probably be smart to do so in a manner that allows you to edit other game files as well (if we're still talking about move editing). Specifically, PlCo.dat and the DOL file.

DOL file for move interrupts and PlCo.dat for other float values and things like:

PlCo.dat
DK Side-B Mechanic
A5E0 - Reduction per input (frames) 9.0 -> 6.0
A5EC - Multiplier for damage in bury formula 0.7 -> 0.9
A600 - Frames of invincibility on exit 18 -> 1

EDIT: I mean, idk. Maybe not PlCo. Those things above apply to a general attack effect, it just so happens that DK is the only playable character with an attack of this effect.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Achilles, so the only "character specific" values in that file are for DK's side-b? I'll consider adding that in the future. What else is stored in those files?

Also Stratocaster:
I hope to add support for changing the length of of scripts in the future, but that may not be until further down the road. My current goal for the next update is simply to add the ability to modify hitbox values for each move. Later on, I'll branch out and add support for modifying all of the other events, like timers. Then I will hopefully work on changing script lengths. I'm also pretty eager to add in support for Magus' speed adjustment code, so I don't know what will come first.
 

Stratocaster

Smash Ace
Joined
Oct 6, 2007
Messages
672
Location
Knoxville, TN
It will be easier to start with events like timers before moving onto more complicated events like hitboxes, but at the very least I highly suggest finding them through the subactions rather than the cheating and using each individual location because expanding the functionality will be much easier. I also consider the stuff around the hitboxes to be equally important as the hitbox itself because, for instance, you could not make Fox's multi hit dair function like Falco's dair without changing the script.
 

DRGN

Technowizard
Moderator
Premium
Joined
Aug 20, 2005
Messages
2,175
Location
Sacramento, CA
It will be easier to start with events like timers before moving onto more complicated events like hitboxes, but at the very least I highly suggest finding them through the subactions rather than the cheating and using each individual location because expanding the functionality will be much easier. I also consider the stuff around the hitboxes to be equally important as the hitbox itself because, for instance, you could not make Fox's multi hit dair function like Falco's dair without changing the script.
I agree with this. And most likely if you design it this way, Ampers, you'll later find that other feature additions or design changes that you didn't think of at first will be much easier to implement.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
It will be easier to start with events like timers before moving onto more complicated events like hitboxes, but at the very least I highly suggest finding them through the subactions rather than the cheating and using each individual location because expanding the functionality will be much easier. I also consider the stuff around the hitboxes to be equally important as the hitbox itself because, for instance, you could not make Fox's multi hit dair function like Falco's dair without changing the script.
Oh yes, I definitely plan to actually use the information you told me to locate the hitbox info systemmatically instead of through brute force. At the time I didn't know how bad of an idea that was but I now realize.

I will assure you though that I am definitely going to write the program with the addition of new features in mind. I'm already setting up the infrastructure to make future additions come more easily.
 

Quillion

Smash Hero
Joined
Sep 17, 2014
Messages
5,512
Holy 5)-(1+, dude!

Melee hacking is well on its way to matching Brawl hacking!
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Achilles, so the only "character specific" values in that file are for DK's side-b? I'll consider adding that in the future. What else is stored in those files?
Well, like I said it's not even a character specific trait. It's just data related to a general attack effect.

PlCo holds a bunch of info related to "common" things seen in basically every match. Things like this.

I'd just not worry about it for now.
 
Last edited:

oksas

oak-sauce
Joined
Apr 12, 2011
Messages
458
this is amazing. so great to see not only a long-needed program be developed, but also to see so much collaboration out in the open. you guys are awesome
 

OninO

Smash Journeyman
Joined
May 19, 2014
Messages
289
Hey,
IntenetExplorer has semi open-sourced his Melee Toolkit would you consider adding your code into that as opposed to creating a whole new utility? I understand if coding in C# presents a barrier to entry (it did to me).

Edit: Also that google docs link appears to be dead, just me?
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Hey,
IntenetExplorer has semi open-sourced his Melee Toolkit would you consider adding your code into that as opposed to creating a whole new utility? I understand if coding in C# presents a barrier to entry (it did to me).

Edit: Also that google docs link appears to be dead, just me?

That would be nice to have everything packaged into one program as opposed to several small programs, but as you mentioned I am not familiar enough with C# to do so. I'm really only proficient in Java and C++. I really don't think I could make the commitment to learn a new language on top of this right now because I'm already spending more time than I probably should on this project. Maybe someday though...

Also the google doc is still working for me, not too sure why it wouldn't be working for you.
 
Last edited:

OninO

Smash Journeyman
Joined
May 19, 2014
Messages
289
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).
 
Top Bottom