• 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
When you say sweetspot, do you mean like falcon's knee where if you hit it early it's stronger? (as opposed to things like marth's tipper where the tip is stronger throughout the whole move).

If your question is the former, unfortunately there isn't a great way to do it. For ideal results, you're right you'd want to duplicate the hitboxes and add a timer. In some cases, you may be able to delete unnecessary scripts to make room for this. Not always though.
Another thing you could do that would take up less space is make the move only use 1 hitbox at a time. Most moves have 2-3 small hitboxes attached to different limbs for an attack, but you could easily make it use only a single big hitbox for the entire move. It's not ideal, but it could work.

Hope this helps!
 
Last edited:

tatatat0

Smash Journeyman
Joined
Jan 28, 2015
Messages
412
Is there any way that I could add a sweetspot to a move that doesn't already have one? It seems like I would have to copy every single hitbox in the move and then also add a timer, and that seems like it would take far too many bytes.
If you only want to power up one hitbox you'd only have to add 24 bytes, 20 for the hitbox and 4 for a timer. So find some big things like graphical effects that are 20 bytes and replace it with a hitbox, also replace a thing that is 4 byte with a timer. Place timer before the normal hitbox(s) and the new hitbox before that timer.
An example of how this would look is here:
Original:

New:
Save the changes, Now most likely if you are going to make a sweetspot you'd want to power up the original hitbox in some way for the sweetspot. To do this click on the tab in the top right and click other. Then check the "Use raw data for subactions" box.
Go back to your subaction you were editing and copy the hitbox data you want to buff for a sweetspot. Paste it into the empty hitbox, save, and disable the "Use raw data for subactions". They should now be identical.
Set the timer and buff the move in any way you want.
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
Hey guys, been a little while since I've dropped in here. Good news is I come bearing new features!

Changelog:
-Added FSM dol patch, meaning users can now easily patch their ISO to make full use of the Frame Speed Modifiers feature. In addition, users can now import/export FSM data for easier sharing of character edits.


-Added projectile hitbox editor menu. This menu includes most projectile hitboxes from the cast.

There are still some absent entries due to the difficulty finding some specific hitboxes, but it's a satisfying list.

-Added copy/paste functionality for hitboxes. There are now two buttons for just that on hitbox scripts.

See? Pretty.

You can download the update here: http://download1523.mediafire.com/8s4eu23474hg/e7hpy8ixjjrhu3x/Crazy+Hand+v1.23.zip

Hope you all enjoy the new update! :)
 
Last edited:

tatatat0

Smash Journeyman
Joined
Jan 28, 2015
Messages
412
Hey guys, been a little while since I've dropped in here. Good news is I come bearing new features!

Changelog:
-Added FSM dol patch, meaning users can now easily patch their ISO to make full use of the Frame Speed Modifiers feature. In addition, users can now import/export FSM data for easier sharing of character edits.
It doesn't seem to recognize manual insertion of the FSM code into the .DOL.
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
It doesn't seem to recognize manual insertion of the FSM code into the .DOL.
Hmm, that's odd.. If you wouldn't mind, could you run Crazy Hand through cmd or something else that shows console output? When Crazy Hand can't find the FSM engine code it prints out how many bytes matched the code. It's possible that I'm having it check for too many bytes.
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
What projectiles do you not know the offsets for?

Nice work as always, Tater. I love seeing things get better and better.
As far as character projectiles go, there are things missing that I know have to be somewhere such as Samus's hard missile hitbox, Young Link's bomb impact/explosion hitboxes, Pichu/Pikachu's thunder projectile(The actual bolt of lightning), Zelda's Din's fire, Ness's PK Flash and maybe PK thunder 2? Ice Climber's neutral-B ice blocks, the list goes on. Although I think that's about it. These were the ones I couldn't find from looking in the same chunk of code as the special move properties that they're associated with(Mario's fireball hitbox is located 4 bytes after the last value associated with his fireballs, for instance). With more time I'll be able to weed out the more difficult to find hitboxes.

Thanks for the praise everyone, I'm glad to contribute to the community :)
 

Abyssal Lagiacrus

Fly across the high seas and mountains
Joined
Jul 30, 2014
Messages
1,698
Location
Arkadelphia, Arkansas
NNID
LugiaTheGuardian
3DS FC
2981-6257-4399
I mean, all this coding stuff with bytes and offsets and **** just blows my mind, so yeah lmao
I love the stuff you and the others do
 

tatatat0

Smash Journeyman
Joined
Jan 28, 2015
Messages
412
Hmm, that's odd.. If you wouldn't mind, could you run Crazy Hand through cmd or something else that shows console output? When Crazy Hand can't find the FSM engine code it prints out how many bytes matched the code. It's possible that I'm having it check for too many bytes.
I have no idea how to do that :p, Please explain. So I tried running it directly from a bat like
@Echo off
start "Crazy hand v1.23.jar"
pause
got no results.
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
As far as character projectiles go, there are things missing that I know have to be somewhere such as Samus's hard missile hitbox, Young Link's bomb impact/explosion hitboxes, Pichu/Pikachu's thunder projectile(The actual bolt of lightning), Zelda's Din's fire, Ness's PK Flash and maybe PK thunder 2? Ice Climber's neutral-B ice blocks, the list goes on. Although I think that's about it. These were the ones I couldn't find from looking in the same chunk of code as the special move properties that they're associated with(Mario's fireball hitbox is located 4 bytes after the last value associated with his fireballs, for instance). With more time I'll be able to weed out the more difficult to find hitboxes.

Thanks for the praise everyone, I'm glad to contribute to the community :)
Hitbox Data Offsets

Samus: Missile
0x4070 - Homing
0x408c - Smash

Ice Climbers: Ice Block
0x3b30

Link: Bombs
0x4258 - flying through air
0x4274 - explosion

Young Link: Bombs
0x4434 - flying through air
0x445c - explosion

Zelda: Din's Fire
0x3fe4

Pikachu: Lightning Bolt
0x3e28

Pichu: Lightning Bolt
0x3ce8

Ness: PK Flash & PK Thunder
0x3d94 - PK Flash
0x405c - PK Thunder initial spawn
0x4138 - PK Thunder traveling through air

Code:
Function:
802790c0     SubactionEvent_HitboxProjectile

Set a breakpoint at 802790dc and then r5 contains a pointer to the hitbox data that is about to be spawned.
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
Hitbox Data Offsets

Samus: Missile
0x4070 - Homing
0x408c - Smash

Ice Climbers: Ice Block
0x3b30

Link: Bombs
0x4258 - flying through air
0x4274 - explosion

Young Link: Bombs
0x4434 - flying through air
0x445c - explosion

Zelda: Din's Fire
0x3fe4

Pikachu: Lightning Bolt
0x3e28

Pichu: Lightning Bolt
0x3ce8

Ness: PK Flash & PK Thunder
0x3d94 - PK Flash
0x405c - PK Thunder initial spawn
0x4138 - PK Thunder traveling through air

Code:
Function:
802790c0     SubactionEvent_HitboxProjectile

Set a breakpoint at 802790dc and then r5 contains a pointer to the hitbox data that is about to be spawned.
Thanks a bunch Achilles c:

No difference. it runs but no console commands are shown, is there even an api for it?
I'm not sure why you aren't getting console output... On my machine that same file does the trick. Either way I assume you're using the tata hack pack iso so I tried it myself. I guess there are different places in the ISO you can put the FSM engine, and the patch Crazy Hand checks for is located somewhere different than yours. I'll release a small update sometime tomorrow with the added projectile hitboxes and the option to ignore Crazy Hand's native FSM engine check.

EDIT: Although, I'm not sure if the Frame Speed Modifiers menu will do you much good if Crazy Hand can't find the FSM engine since it puts the FSM data in the same area. It's worth a shot though.
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Thanks a bunch Achilles c:



I'm not sure why you aren't getting console output... On my machine that same file does the trick. Either way I assume you're using the tata hack pack iso so I tried it myself. I guess there are different places in the ISO you can put the FSM engine, and the patch Crazy Hand checks for is located somewhere different than yours. I'll release a small update sometime tomorrow with the added projectile hitboxes and the option to ignore Crazy Hand's native FSM engine check.

EDIT: Although, I'm not sure if the Frame Speed Modifiers menu will do you much good if Crazy Hand can't find the FSM engine since it puts the FSM data in the same area. It's worth a shot though.
Have the user be able to specify the start point of the FSM list.
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
A preview of things to come :)



(Ignore the ugly GUI :p)
 

QuickLava

Smash Journeyman
Joined
Nov 30, 2013
Messages
361
Location
Somewhere in the Aether....
This has almost nothing to do with Crazy Hand, but I made a Pikachu-printer program :3

... This. This is what I've been missing in life.
Edit: While I'm here, I've got a question. How exactly would one go about setting a graphical effect to emit from a specific bone? I know Mewtwo's F-Air does it, but I can't find anything in it's subaction data to indicate what causes it. Any thoughts?
 
Last edited:

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
... This. This is what I've been missing in life.
Edit: While I'm here, I've got a question. How exactly would one go about setting a graphical effect to emit from a specific bone? I know Mewtwo's F-Air does it, but I can't find anything in it's subaction data to indicate what causes it. Any thoughts?
Looks like you stumbled upon a hidden feature for graphic effects.

Graphic effect format(with known features to date) is
28 AA UU VV BB BB WW XX CC CC DD DD EE EE FF FF GG GG HH HH

A: Bone Attachment
B: Effect ID
C: Z offset
D: Y offset
E: X offset
F: Z scatter
G: Y scatter
H: X scatter
U:Unknown 1
V:Unknown 2
W:Unknown 3
X:Unknown 4

Bits 7-13 are used to bind the graphic effect to a bone(Using the same IDs as hitboxes.)

Mewtwo said:
forward-air GFX
28 8D 00 00 04 E5 00 00 00 00 00 00 00 00 00 00 00 00 00 00

first 6 bits of 8D = 10001101 (integer value of 35)

Rapid jab loop GFX(called before goto jab loop)
28 8C 00 00 04 E5 00 00 05 78 00 00 F7 68 00 00 00 00 00 00

First 6 bits of 8C = 10001100 (integer value of 35 as well... hm.)
Good find @ QuickLava QuickLava :)
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Looks like you stumbled upon a hidden feature for graphic effects.

Graphic effect format(with known features to date) is
28 AA UU VV BB BB WW XX CC CC DD DD EE EE FF FF GG GG HH HH

A: Bone Attachment
B: Effect ID
C: Z offset
D: Y offset
E: X offset
F: Z scatter
G: Y scatter
H: X scatter
U:Unknown 1
V:Unknown 2
W:Unknown 3
X:Unknown 4

Bits 8-13 are used to bind the graphic effect to a bone(Using the same IDs as hitboxes.)



Good find @ QuickLava QuickLava :)
The game takes the first halfword of the command and uses these bits for the bone ID.

gfx.PNG


The first two bits are used for something...idk exactly what. I think the first has to do with the length the gfx is spawned for. I dont have time for anymore testing right now.

The third byte of the command has something to do with using a fixed bone to spawn on if the third byte contains 0x80.

Graphics spawned with the DC command use a bone ID of 0 and use 0 for those first two bits. That's all I have for now.

EDIT: oh, and GFX with this command type cannot be spawned while in action state invisibility (ex. sheik up-b), but can be spawned while in subaction invisibility (ex. Spacies side-b).
 
Last edited:

QuickLava

Smash Journeyman
Joined
Nov 30, 2013
Messages
361
Location
Somewhere in the Aether....
So..... Just gonna leave these here. Thank you based Tater and Achilles.


A Falco Up-Smash edit with a bit of added flare. This is part of another mod I'm currently working on. Turned out pretty well.
 
Last edited:
D

Deleted member

Guest
In this program I looked at all the settings but I couldn't find any values on Pichu doing damage to itself. Where might I start editing Pichu so that it can't hurt itself during it's Specials? Thanks. :172:
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
In this program I looked at all the settings but I couldn't find any values on Pichu doing damage to itself. Where might I start editing Pichu so that it can't hurt itself during it's Specials? Thanks. :172:
That would be inside Pichu's subactions. If you click on the menu on the right and select subactions(attack only) you'll be able to edit a large chunk of his move's data including removing the scripts that damage him.

Moves that damage Pichu are:

Forward-smash(Middle)
Forward-air
Down-air
Forward throw
Neutral-B(Ground and Air)
Side-B hold
Side-B
Up-B start
Up-B start(2)
Down-B loop(2)

Look for a script that is titled Self-Damage in those subactions. The textbox below it should look like
CC 00 00 XX

XX is the amount of damage(in hexadecimal) that Pichu does to himself from this script. Changing the damage value to 00 essentially makes the script do nothing.
 

QuickLava

Smash Journeyman
Joined
Nov 30, 2013
Messages
361
Location
Somewhere in the Aether....
Yo Tater, any chance we could get a way to revert individual subactions to 1.02 defaults? I think it'd be a nice addition. I imagine it'd be doable considering you can already revert entire characters to 1.02 defaults. Considering subaction lengths are invariable at the moment, it'd probably be as simple as applying the 1.02 defaults to the defined editable region used by the subaction editor right? Just my guess, I don't do this stuff.
 
Last edited:

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
Yo Tater, any chance we could get a way to revert individual subactions to 1.02 defaults? I think it'd be a nice addition. I imagine it'd be doable considering you can already revert entire characters to 1.02 defaults. Considering subaction lengths are invariable at the moment, it'd probably be as simple as applying the 1.02 defaults to the defined editable region used by the subaction editor right? Just my guess, I don't do this stuff.
It's definitely doable; I've caught myself thinking "Great, I ruined that subaction and now I have to reset" while editing characters too often for it to not be a feature. It'll be included in the next release.
 

QuickLava

Smash Journeyman
Joined
Nov 30, 2013
Messages
361
Location
Somewhere in the Aether....
Another question for you guys, would it be possible to add the ability to attach GFXs to bones from within Crazy Hand? I've been doing it for a while now, and it's actually really simple. As you guys said, you need to convert the bone's ID number to binary, then take the first 6 bits from that and add either 01 or 00 after it (I haven't found any difference between the two, I think the can be used interchangeably). Convert that from binary to hex, and you're done. That being said, I imagine it'd be possible to automate this. I'm kinda useless when it comes to programming things, so forgive me if I'm way wrong, but I'm guessing you could use something like this (if Bone IDs are stored in Decimal) or this (if they're stored in Hexadecimal) to convert the bone ID to binary. From there, you could put the output into a formula like (Output * 100) + 01. Then, you could take the first 8 bits of that output, and put it into something like this. Then, the output from that can be written into the correct space in the subaction data. If that works like I'm assuming it would (again, I've never done anything like this before), you would be able to simply type a bone ID into a box in the GFX and have it automatically converted into something usable. I'm sure there are tons of problems with my logic, but it's all I've got from my 5 minutes of research.
 
Last edited:

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
Another question for you guys, would it be possible to add the ability to attach GFXs to bones from within Crazy Hand? I've been doing it for a while now, and it's actually really simple. As you guys said, you need to convert the bone's ID number to binary, then take the first 6 bits from that and add either 01 or 00 after it (I haven't found any difference between the two, I think the can be used interchangeably). Convert that from binary to hex, and you're done. That being said, I imagine it'd be possible to automate this. I'm kinda useless when it comes to programming things, so forgive me if I'm way wrong, but I'm guessing you could use something like this (if Bone IDs are stored in Decimal) or this (if they're stored in Hexadecimal) to convert the bone ID to binary. From there, you could put the output into a formula like (Output * 100) + 01. Then, you could take the first 8 bits of that output, and put it into something like this. Then, the output from that can be written into the correct space in the subaction data. If that works like I'm assuming it would (again, I've never done anything like this before), you would be able to simply type a bone ID into a box in the GFX and have it automatically converted into something usable. I'm sure there are tons of problems with my logic, but it's all I've got from my 5 minutes of research.
Thankfully Crazy Hand already has bitshifting/converting functions built in; It's actually how I figured out which bits were used for bone attachments :p

Also it turns out bits 7-13 are used for the format; the same amount of bits used for bone IDs in hitboxes. 6 bits works fine until you get to a higher bone ID(I think it's 63 or over? I don't remember offhand). 7 bits works for any bone ID, and is what Crazy Hand uses now that I figured it out.

On a semi-related topic, does anyone have any opinions on when the next release should be? I've added all these small features/fixes to Crazy Hand that would be useful for everyone to have, but the larger feature I've been working on(Originally subaction interrupt editing, which has evolved into a more useful but at this time less user-friendly feature) is still incomplete. I could either release all the small fixes now-ish or all the small fixes plus the subaction logic editing a few days from now.

The subaction logic editing menu(That's a mouthful.) makes it more convenient to do stuff like this:
As well as subaction interrupt editing.
 

QuickLava

Smash Journeyman
Joined
Nov 30, 2013
Messages
361
Location
Somewhere in the Aether....
Thankfully Crazy Hand already has bitshifting/converting functions built in; It's actually how I figured out which bits were used for bone attachments :p

Also it turns out bits 7-13 are used for the format; the same amount of bits used for bone IDs in hitboxes. 6 bits works fine until you get to a higher bone ID(I think it's 63 or over? I don't remember offhand). 7 bits works for any bone ID, and is what Crazy Hand uses now that I figured it out.

On a semi-related topic, does anyone have any opinions on when the next release should be? I've added all these small features/fixes to Crazy Hand that would be useful for everyone to have, but the larger feature I've been working on(Originally subaction interrupt editing, which has evolved into a more useful but at this time less user-friendly feature) is still incomplete. I could either release all the small fixes now-ish or all the small fixes plus the subaction logic editing a few days from now.

The subaction logic editing menu(That's a mouthful.) makes it more convenient to do stuff like this:
As well as subaction interrupt editing.
... You people are gods. Also I'd be fine waiting.
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Floating Point Research - Yoshi
0x34E0 = 12 = frame length of aerial jump turnaround animation
0x34E4 = 0.3 = x-axis joystick value to initiate a turnaround aerial jump
0x34E8 = 120 = knockback resistance (not exactly sure how the game uses it)

The game reads these floats around code line 0x800CBFB0.

Tater, my above post outlines the exact bits the game uses for the GFX format.
 
Last edited:

tatatat0

Smash Journeyman
Joined
Jan 28, 2015
Messages
412
Floating Point Research - Yoshi
0x34E0 = 12 = frame length of aerial jump turnaround animation
0x34E4 = 0.3 = x-axis joystick value to initiate a turnaround aerial jump
0x34E8 = 120 = knockback resistance (not exactly sure how the game uses it)

The game reads these floats around code line 0x800CBFB0.

Tater, my above post outlines the exact bits the game uses for the GFX format.
iirc the knockback resistance is already in crazy hand.
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Not sure if you know this, but here is how to find the interrupt for any [common] subaction state.

Table @ 0x3bf9c0 in DOL (entry at this address is for "Wait")
The table actually starts a little before this....

0x00 Subaction ID
0x04 Flags 1
0x08 Flags 2
0x0C animation interrupt function
0x10 IASA function
0x14 action physics function
0x18 collision interrupt
0x1C camera behavior function
0x20 Next subaction ID

See the top of the Global Addresses sheet for a tiny bit more info.
 

tatatat0

Smash Journeyman
Joined
Jan 28, 2015
Messages
412
Not sure if you know this, but here is how to find the interrupt for any [common] subaction state.

Table @ 0x3bf9c0 in DOL (entry at this address is for "Wait")
The table actually starts a little before this....

0x00 Subaction ID
0x04 Flags 1
0x08 Flags 2
0x0C animation interrupt function
0x10 IASA function
0x14 action physics function
0x18 collision interrupt
0x1C camera behavior function
0x20 Next subaction ID

See the top of the Global Addresses sheet for a tiny bit more info.
You are godly Achilles. On the other note, @CeLL How is that screen rumble going? :yeahboi:
 

zaiman12345

Smash Apprentice
Joined
Jul 21, 2015
Messages
161
Location
Derpland
NNID
theawesome4567
Thankfully Crazy Hand already has bitshifting/converting functions built in; It's actually how I figured out which bits were used for bone attachments :p

Also it turns out bits 7-13 are used for the format; the same amount of bits used for bone IDs in hitboxes. 6 bits works fine until you get to a higher bone ID(I think it's 63 or over? I don't remember offhand). 7 bits works for any bone ID, and is what Crazy Hand uses now that I figured it out.

On a semi-related topic, does anyone have any opinions on when the next release should be? I've added all these small features/fixes to Crazy Hand that would be useful for everyone to have, but the larger feature I've been working on(Originally subaction interrupt editing, which has evolved into a more useful but at this time less user-friendly feature) is still incomplete. I could either release all the small fixes now-ish or all the small fixes plus the subaction logic editing a few days from now.

The subaction logic editing menu(That's a mouthful.) makes it more convenient to do stuff like this:
As well as subaction interrupt editing.
holy crap.
this is insane
 
Top Bottom