• 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

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
14000000 0000XXXX and 1C000000 0000XXXX are "black sheep" and f**kin' weird.
These commands still remain likes ghost even though you delete these commands.

For example,

this commands
14000000 000035F8 ...........
change to
08000005 2C00000A ..........

In this case, game will freeze when hitbox hit a character because damage is 504%(0x1F8%).

So, we should be careful not to move these commands.
Achilles1515 Achilles1515 made an illuminating note earlier about how the game keeps track of where these converted offsets are in the relocation table of a Plxx.dat file.
Edit: he also made another post that goes into more detail with an example.

I’ll try to explain with some pictures Ampers Ampers @tatatat0 @Itaru

Special events like 14 and 1C point to specific offsets in the .dat file. When loaded in the game, they are copied into memory and need to have their offsets recalculated as RAM pointers:



After being loaded into the game, both 14 events in DK’s taunt get converted into something like this:

14000000 00003944 -- file offset
->
14000000 812778A4 -- dynamic pointer

So when you try to edit these 14 and 1C events, the relocation table still tries to convert what it thinks are offsets--even though the data has been changed.



---

It seems to be possible to prevent this from happening.

Take note of the location of the offset in your problematic 14 or 1C event modification and find the start of the relocation table from the value in 0x4 of the .dat header. Then scroll down until you find the location of your offset:



You just need to get the relocation table to stop referencing the locations you want to edit.

Edit: This part is where I don't really know what to do... It seems like editing the table too severely would mess up a few things.

I thought a benign way to go about it might involve replacing the the problem offsets with the next valid table offset, like this:


I figured this would get the job done without anything too heavy being done to the table; but it seems to mess up the offset calculation for the repeated entry.

Does anyone know of a simple way to eliminate these entries without like, changing the file size? It DOES seem to fix the conversion ghosts:

 
Last edited:

Guesmu

Smash Apprentice
Joined
Aug 20, 2015
Messages
76
Does the crash happen during any characters rapid jab, or just a specific character?
Did you add any FSM (Frame Speed Modifiers) before the crash happened?
Did you use an unmodified version of melee for this mod, or was it altered somehow(20XX, codes added from DRGN's code manager and if so which codes, etc)?



He probably changed one of the ???? values associated with up-B in mewtwo's character specific attributes.



From what I remember some values associated with a character's up-B allowed them to jump out of special fall, or even not enter special fall at all.
He may have also just added an IASA call on mewtwo's up-B so he could cancel the move with another attack.
20xx, stage edits, my own balance patch over sdremix and Super gannon Over Pal gannon, Everything was working fine before then. It is everyone's but falcon's, I deleted the iso already, so I was just seeing if you wanted to see if this was a problem with crazy hand 1.31.
 
Last edited:

Guesmu

Smash Apprentice
Joined
Aug 20, 2015
Messages
76
https://drive.google.com/open?id=0B0MjmXYg0ejWMlE5ZjFrb2NCbEU <- Version 1.8

Project Balance patch!

I am putting it here because it is made 75% with crazy hand 1.31!

Project B is just a more drastic SD Remix, but there are N0 change's to any top tiers. (Fox, Falco, Marth and Sheik) Only BUFFS!

The download link will give you SAT files. Because I built the pack on a Vanila ISO and then replaced SD remix on 20xx with the charcter files.

Thank you Ampers for making crazy hand (And Tater, Tatat, Itaru, and many more...)

Instrutions for getting this on 20xx :
1. Get ISO (Dump your disk, or download it from NOT TORRENT FILE OR DMG FILE!) Build 20xx -> http://smashboards.com/threads/the-20xx-melee-training-hack-pack-v4-05-update-3-17-16.351221/

2. Get DTW http://smashboards.com/threads/new-tools-for-texture-hacking-update-dtw-4-3-released-32-bit.373777/ for this to go FAST! Or just use GC Rebulider if you want to put the files over SD Remix, just get GCR and open your iso and extract at the top of the list of your ISOS files, the root, and if you want em' over pal, you could 1. Rename .SAT to .PAT for gcr 2. Or use DTW to over write them.

3. If you use GCR and want to put the files over SD Remix, just use gcr and open your iso and extract at the top of the list of your ISOS files, the root, and if you want em' over pal, you could Rename .SAT to .PAT and over regular charcter's, .DAT.

I hope you try this! And please give feedback on the charcter's. I might make a tier list, so opinons will help a looot!

I will make a vanilla to Project B guide soon.

Thanks for reading!
 

Middle Mang

Smash Cadet
Joined
Jul 30, 2016
Messages
28
Hello,
I have been using this program for quite a while now (honestly I know nothing about this kind of stuff but I have "brute forced" my way through and made some cool stuff) and was wondering if it was possible to do something extra crazy. Is it possible to have Redead spawn in from one of Ganon's moves? I want to make a pseudo necromancer Ganon for fun!
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
https://drive.google.com/open?id=0B0MjmXYg0ejWMlE5ZjFrb2NCbEU <- Version 1.8

Project Balance patch!

I am putting it here because it is made 75% with crazy hand 1.31!

Project B is just a more drastic SD Remix, but there are N0 change's to any top tiers. (Fox, Falco, Marth and Sheik) Only BUFFS!

The download link will give you SAT files. Because I built the pack on a Vanila ISO and then replaced SD remix on 20xx with the charcter files.

Thank you Ampers for making crazy hand (And Tater, Tatat, Itaru, and many more...)

Instrutions for getting this on 20xx :
1. Get ISO (Dump your disk, or download it from NOT TORRENT FILE OR DMG FILE!) Build 20xx -> http://smashboards.com/threads/the-20xx-melee-training-hack-pack-v4-05-update-3-17-16.351221/

2. Get DTW http://smashboards.com/threads/new-tools-for-texture-hacking-update-dtw-4-3-released-32-bit.373777/ for this to go FAST! Or just use GC Rebulider if you want to put the files over SD Remix, just get GCR and open your iso and extract at the top of the list of your ISOS files, the root, and if you want em' over pal, you could 1. Rename .SAT to .PAT for gcr 2. Or use DTW to over write them.

3. If you use GCR and want to put the files over SD Remix, just use gcr and open your iso and extract at the top of the list of your ISOS files, the root, and if you want em' over pal, you could Rename .SAT to .PAT and over regular charcter's, .DAT.

I hope you try this! And please give feedback on the charcter's. I might make a tier list, so opinons will help a looot!

I will make a vanilla to Project B guide soon.

Thanks for reading!
Sounds cool! I'll check it out sometime :)

Hello,
I have been using this program for quite a while now (honestly I know nothing about this kind of stuff but I have "brute forced" my way through and made some cool stuff) and was wondering if it was possible to do something extra crazy. Is it possible to have Redead spawn in from one of Ganon's moves? I want to make a pseudo necromancer Ganon for fun!
I've actually modified one of ganon's moves to do just that before; It's a little complicated but nothing too hard to figure out.

You'll need these things:

-DRGN's Melee Code Manager (http://smashboards.com/threads/melee-code-manager-easily-add-mods-to-your-game.416437/)
-Achille's Custom Subaction Event - Projectile/Item Spawn (http://smashboards.com/threads/custom-subaction-event-projectile-item-spawn.427019/)

Import the Custom Subaction Event's code into Melee Code Manager, then write the code into your ISO just as you would with any other code in MCM.

I'm pretty sure the latest release of Crazy Hand (v1.31) has its own event identifier for achille's projectile spawn event, but if it doesn't you can enter the code for the event manually in a couple of different ways.
 

Middle Mang

Smash Cadet
Joined
Jul 30, 2016
Messages
28
Sounds cool! I'll check it out sometime :)



I've actually modified one of ganon's moves to do just that before; It's a little complicated but nothing too hard to figure out.

You'll need these things:

-DRGN's Melee Code Manager (http://smashboards.com/threads/melee-code-manager-easily-add-mods-to-your-game.416437/)
-Achille's Custom Subaction Event - Projectile/Item Spawn (http://smashboards.com/threads/custom-subaction-event-projectile-item-spawn.427019/)

Import the Custom Subaction Event's code into Melee Code Manager, then write the code into your ISO just as you would with any other code in MCM.

I'm pretty sure the latest release of Crazy Hand (v1.31) has its own event identifier for achille's projectile spawn event, but if it doesn't you can enter the code for the event manually in a couple of different ways.
Thanks for the reply, I usually crash the game trying to use other items or projectiles but I actually just got it to work... but the Redead's do not serve their master lol (understandably so). I will keep playing around with it!
 
Last edited:

Guesmu

Smash Apprentice
Joined
Aug 20, 2015
Messages
76
Sounds cool! I'll check it out sometime :)



I've actually modified one of ganon's moves to do just that before; It's a little complicated but nothing too hard to figure out.

You'll need these things:

-DRGN's Melee Code Manager (http://smashboards.com/threads/melee-code-manager-easily-add-mods-to-your-game.416437/)
-Achille's Custom Subaction Event - Projectile/Item Spawn (http://smashboards.com/threads/custom-subaction-event-projectile-item-spawn.427019/)

Import the Custom Subaction Event's code into Melee Code Manager, then write the code into your ISO just as you would with any other code in MCM.

I'm pretty sure the latest release of Crazy Hand (v1.31) has its own event identifier for achille's projectile spawn event, but if it doesn't you can enter the code for the event manually in a couple of different ways.
Thanks! I will make a thread for it eventually! Please give feedback!

It's is not as good as the stuff you made though...
 

Middle Mang

Smash Cadet
Joined
Jul 30, 2016
Messages
28
Another thing, has anyone managed to use the bowser side-B claw GFX on other characters without the game crashing?
 

Tater

Smash Journeyman
Joined
Apr 10, 2014
Messages
201
Location
Socal
NNID
Taternater
3DS FC
2406-5307-2936
Another thing, has anyone managed to use the bowser side-B claw GFX on other characters without the game crashing?
Bowser's data has to be loaded into the match. Same as with any character-specific GFX/SFX (Character-specific SFX will not crash the game if not loaded, though).

There may be a code floating around that lets you load certain parts of character data if you know the location; in the most recent version of 20XX I noticed that the "Sound effect on autocancel" code plays the coin hitbox effect SFX, which is normally only loaded into memory if Doc/Mario/Luigi are in the match.
 

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
I’m not sure if this is common knowledge or not, but I thought I’d share a quick note about character/item projectiles, and the vanilla projectile flag event.

There’s a useful playerThink-like function in the game (8006c80c) that determines how the projectile spawn flag (event 60) behaves every frame according to a pointer assigned by certain action states. It’s very similar to the existing move logic stuff in CH 1.31

It’s possible to manipulate this pointer and direct projectile spawn behavior by pointing it to a function that handles a character-specific projectile--like a fireball. The assigned projectile behavior lasts until the next action state change.

The function pointed to must handle a type of projectile that’s appropriate for the character, but may be assigned to action states that don’t normally use character projectiles.

Using Achilles’ custom character data subaction event, you can write to internal player data offset 0x21BC with any of the following (appropriate) article behaviors:

Code:
Character Projectile/Article spawning functions (Melee v1.02)
Update function 8006c80c -- (uses blrl to link to the following)
    internal player data offset 0x21BC -- contains pointer used by blrl
Projectile "spawn flag" is a flag used by player subaction event 60 to denote spawn timing for projectiles
    internal player data offset 0x2210 (bit 0x80) -- projectile spawn flag

Function    Uses spawn flag?    Description            Extra Notes
80095efc    0    (all thrown items)            universal throw, excludes aerial z-drops
800ce1d4    1    Use Ray Gun
800d80f4    1    Use Super Scope (small bullets)
800d86b8    1    Use Super Scope (charged bullet, any amount)
800cd914    1    Use Star Rod
800cdb9c    1    Use Lip Stick
800ce650    1    Use Fire Flower            appears to have special interrupt logic

800e0ee0    1    Mario/Doc fireball/pill
800e1248    0    Mario/Doc cape
8014295c    1    Luigi fireball
8011d018    1    Peach turnip
8011d424    0    Peach parasol (startup)
8011e174    0    Peach Toad
8011e230    0    Peach Toad spore cloud
80134590    0    Bowser down-B fall
80134518    0    Bowser down-B land
8012e110    1    Yoshi egg
8012e644    0    Yoshi down-B land
800bbcc0    0    Become Yoshi Egg (after grab)
8010db3c    0    DK down-B
8010e0cc    0    DK side-B
800e5f28    0    Fox/Falco Laser
N/A?        1    Fox/Falco Laser throw        These throws use projectile flag, but with some other function; not our common blrl
800e845c    0    Fox/Falco shine start
800e83e0    0    Fox/Falco shine hold
800e9df8    0    Fox/Falco side-B
800e719c    0    Fox/Falco up-B start
800e7100    0    Fox/Falco up-B launch
80116b70    1    Ness PK fire
80114eb8    0    Ness yoyo            used in both up and down smash
8011f500    0    IC icicle
80122d2c    0    IC frost
80123218    0    Nana up-B rope            only used by nana (subplayer)
800f21e8    0    Kirby up-B projectile            only on landing
800f53ac    0    Kiry Hammer
800f9260    1    Kirby-Mario/Doc
800f98f4    1    Kirby-Luigi
8010c288    0    Kirby-Peach (toad)
8010c344    0    Kirby-Peach (toad spore)
800fe0e0    0    Kirby-Fox/Falco
801090d4    0    Kirby-Popo/Nana
80105a34    0    Kirby-Zelda
80106db0    0    Kirby-Sheik
8010cfb0    0    Kirby-GAW start            notable that GAW has no start/finish like this
8010ce5c    0    Kirby-GAW finish
8010b1f4    0    Kirby-Marth/Roy
800be6ac    0    Escape from Kirby star (after grab) projectile
8012a074    1    Samus rocket
8012adf0    1    Samus bomb
8013a830    0    Zelda B
801396ac    0    Zelda teleport start
8013979c    0    Zelda teleport finish
8013adb4    0    Zelda -> Sheik start
8013aeac    0    Zelda -> Sheik finish
80112d44    0    Sheik needle(s) throw
8011097c    0    Sheik chain
80112ed8    0    Sheik teleport start
80113038    0    Sheik teleport finish
80114034    0    Sheik -> Zelda start
8011412c    0    Sheik -> Zelda finish
800ec210    1    (y)Link boomerang
800eb7c8    1    (y)Link bomb
800eba4c    0    (y)Link up-B
801277ac    1    Pi(ka)chu thunder            flag is near start of animation
80124c90    0    Pi(ka)chu start up charge
80124d2c    0    Pi(ka)chu launch from charge
8013c94c    0    JP sing
8013ce7c    0    JP rest
80146c08    0    Mewtwo side-B
80146594    0    Mewtwo down-B
801450a0    0    Mewtwo teleport start
80145164    0    Mewtwo teleport finish
80146594    0    GAW jab            many of GAW normals use models (articles?) that trigger these
8014ab48    0    GAW down-A
8014a848    0    GAW f-smash
8014b3a8    0    GAW u-air
8014b45c    0    GAW u-air landing
8014b1b4    0    GAW b-air
8014b268    0    GAW b-air landing    other normals do not appear to use this blrl despite spawning models...
8014e4f0    0    GAW B
8014c46c    0    GAW judgement
8014def0    0    GAW up-B
8014cbf4    0    GAW oil spill            only when used on full bucket
801365a8    0    Marth/Roy B            on attack

Noteworthy projectile moves that do not seem to appear on this list:
Bowser flame
Ness PK thunder
Ness PK flash
Samus (un)charge shot
Zelda fire/explode
(y)Link arrow
Pi(ka)chu B
Mewtwo shadowball

Article behaviors that don’t use the spawn flag seem to have some other purpose. Anything that uses the flag though can be spawned with event 60. (This flag can also be manipulated with code by modifying bit 0x80 of byte 0x2210 of internal player data)

For example:

F8FF000C 020021BC 8014295C -- assigns Luigi fireball spawn
60000000 -- spawns luigi fireball


So long as the correct item is being held, this can also be used for item projectiles.

 
Last edited:

Middle Mang

Smash Cadet
Joined
Jul 30, 2016
Messages
28
Punkline Punkline That looks really cool. I tried replicating what you did with Luigi's dash attack and followed the instructions on injecting Achilles subaction event but every time I hit save the code gets shortened. Do you know what I did wrong? Sorry for all the questions recently, you guys are incredible!

http://imgur.com/a/ZBm5j
 
Last edited:

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
Punkline Punkline That looks really cool. I tried replicating what you did with Luigi's dash attack and followed the instructions on injecting Achilles subaction event but every time I hit save the code gets shortened. Do you know what I did wrong? Sorry for all the questions recently, you guys are incredible!

http://imgur.com/a/ZBm5j
When you hit save, Crazy Hand categorizes the unrecognized custom event lines individually as single "unknown" lines. In reality, these commands are all read in sequence, so as long as they are in order it's all good.

Look closely at the sequence of resulting "unknown" lines and you'll see it's all as you typed it :p

edit - To clarify: since the events are smaller, there are simply more of them.
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Bowser's data has to be loaded into the match. Same as with any character-specific GFX/SFX (Character-specific SFX will not crash the game if not loaded, though).

There may be a code floating around that lets you load certain parts of character data if you know the location; in the most recent version of 20XX I noticed that the "Sound effect on autocancel" code plays the coin hitbox effect SFX, which is normally only loaded into memory if Doc/Mario/Luigi are in the match.
I think that coin sfx used in 20XX is the one that plays on the results screen when it is totaling the coins earned.
 

Middle Mang

Smash Cadet
Joined
Jul 30, 2016
Messages
28
When you hit save, Crazy Hand categorizes the unrecognized custom event lines individually as single "unknown" lines. In reality, these commands are all read in sequence, so as long as they are in order it's all good.

Look closely at the sequence of resulting "unknown" lines and you'll see it's all as you typed it :p

edit - To clarify: since the events are smaller, there are simply more of them.
So shouldn't it be working? I understand why it splits the code now thankfully, but is there anything else I need to edit to make his green fireballs spawn off of dash attack? Also wondering if it's possible to act out of UP-B but that's another story.
 

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
So shouldn't it be working? I understand why it splits the code now thankfully, but is there anything else I need to edit to make his green fireballs spawn off of dash attack? Also wondering if it's possible to act out of UP-B but that's another story.
They should, from what saw in the screenshot. Here’s the Plxx.dat files I made for all the examples in that video. (see attached zip)

For Luigi, I added more “60000000” events in place of each rumble line in order to make multiple fireballs. In the screenshot I only replaced one of the rumble lines.

If you’re not getting any projectiles, it might be that the code for the custom event isn’t installed correctly.

---

As for attacking out of up-B, you can actually use a very similar concept to this projectile function thing. You may even do it with the same custom event, but CH 1.31 has a section called the “move logic” table where you can edit this without having to replace subaction events.

What you’re looking for is the “animation interrupt function” for SpecialHi and SpecialAirHi.

Just like how the projectile behavior is determined by the kind of function pointer assigned to the action state, animation interrupts use function pointers to determine how to act out of an expiring action state.

So if you change Luigi’s animation interrupt functions to a simple falling interrupt (like 800CB2F8) then you will go into a normal falling state after the attack instead of a special “helpless” falling.

 

Attachments

Middle Mang

Smash Cadet
Joined
Jul 30, 2016
Messages
28
Punkline Punkline Thanks. I just had to install the custom event again. Should I make a thread for any questions I might have in the future or are they fine here? I hate taking up space over here with my dumbassery haha.
 

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
Punkline Punkline Thanks. I just had to install the custom event again. Should I make a thread for any questions I might have in the future or are they fine here? I hate taking up space over here with my dumbassery haha.
Nice!

Pretty sure it's fine to post any questions related to Crazy Hand here. If you've got questions about custom subaction events, the development threads are in the code section.

It'd actually be kind of nice to start a separate thread in this sub-forum for discussing the applications of custom subaction events. The development threads were created before this sub-forum existed~
 

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
How do you remove double-jump cancelling?
As far as I know, this has yet to be figured out. I’m curious myself.

How can I edit Young Link's taunt like how Magicscrumpy did in "What if Young Link drank bleach"?
This? I’m not 100% certain, but it’s possible to flag the stamina KO flag on your character and see a similar effect outside of stamina mode.

It’s not really useful, because the player loses control and is permanently downed. It’s possible to unflag the downed effect so the player can stand again, but the act of downing the character changes the action state--making it so that any subaction events after the one that downs the character aren’t read.

Using the custom event I mentioned in my last few posts, you can flag the stamina KO with this syntax:

F8FF000C 00022224 00000010

To get just the downed effect (and not the screen flash, SFX, or body aura) to happen at the end of the current action state:

F8FF000C 00022224 00000020
 

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
How do I make it to where it heals him?
If you’ve installed the Custom Event Codes included with 1.31, you can use the self heal option in event CC like this:

CC010008

01 = heal option
0008 = amount to heal

Addtionally, I have included the necessary codes needed to use Achilles' Projectile Spawning event and also his Self Heal/Damage event. I included them as a library file for DRGN's Melee Code Manager to make it easy. If you're not familiar with the program, here's how you would apply these mods:
1) Get the code manager program here.
2) In this release of Crazy Hand, there's a folder called "codes". In this folder you should find a single text document. Take that file and put it in the "Mods Library" folder of the Melee Code Manager.
3) Boot up Melee Code Manager and select your iso.
4) Browse to the "Injection Mods" tab and scroll down until you find the codes for these events. (You may need to press the rescan for mods button if you don't see them)
5) Select whichever code you want to use and press the save button.
6) The custom events should work now! Add them into any subaction in Crazy Hand and have fun.
 
Last edited:

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
But what exactly is the name of the subaction for his taunt?
"Appeal" It's listed under "all" subactions. Some characters have a separate one for left and right, like young link.

Here's a screenshot the adjustment made on AppealR:

 

Tyadran

Smash Cadet
Joined
Jan 21, 2016
Messages
25
Location
Ohio
NNID
Tyadran
Hey, can someone explain to me why Roy's subactions look super weird when I open them up? He's the first character I want to mess with (I have some neat ideas), but all of his moves open up as a bunch of "Unknown"s and Bone Sets. Can anyone help me out here? It would be greatly appreciated.
 

Guesmu

Smash Apprentice
Joined
Aug 20, 2015
Messages
76
Hey, can someone explain to me why Roy's subactions look super weird when I open them up? He's the first character I want to mess with (I have some neat ideas), but all of his moves open up as a bunch of "Unknown"s and Bone Sets. Can anyone help me out here? It would be greatly appreciated.
Those are value's like, when he moves, how far he moves ect, if you want to edit how his moves look and other stuff like that. You should use hexes. But for edititing like how big his attacks go and how far his up-b goes ect, Crazy Hand is the program!
 

YershiBear

Smash Rookie
Joined
Jul 2, 2016
Messages
5
Is there a way as of the latest version to make a move (Falco's Neutral B, let's say) spawn different items than what it normally does, or to use the "hurt user" thing to heal the user instead? I'm making a Smash Melee mod where everything goes to astronomical levels of crazy, and I want Pichu to heal himself instead of hurting himself with his electric moves. I also wanted to make Falco's lasers be something else, but then it would be WAY too OP for an already crazy mod.
 

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
Is there a way as of the latest version to make a move (Falco's Neutral B, let's say) spawn different items than what it normally does, or to use the "hurt user" thing to heal the user instead? I'm making a Smash Melee mod where everything goes to astronomical levels of crazy, and I want Pichu to heal himself instead of hurting himself with his electric moves. I also wanted to make Falco's lasers be something else, but then it would be WAY too OP for an already crazy mod.
See some of the posts just above you~
Adding custom projectiles, adding vanilla projectiles, make Pichu's hurt event heal

In all cases they require custom subaction events, but are possible after they've been installed as codes.

Hey, can someone explain to me why Roy's subactions look super weird when I open them up? He's the first character I want to mess with (I have some neat ideas), but all of his moves open up as a bunch of "Unknown"s and Bone Sets. Can anyone help me out here? It would be greatly appreciated.
Not every opcode has had its functionality accounted for yet, so unknown syntaxes are marked as "unknown" in Crazy Hand. They're easy enough to figure out though through experimentation.

I'm taking a quick peek at Roy's up-B and here's what I can tell you about the unknowns.

B8 is a body aura assignment event, like what makes Roy flash colors during his up-B (in addition to particle GFX.) I just looked at it more closely as a function in dolphin, and its syntax is as follows Ampers Ampers @Itaru
0x03FC0000 - 8-bit aura ID -- change this for a new effect
0x0003FFFF - 18-bit frame length (int) -- change this to modify the time the aura stays up

C4 is the event that toggles sword trails. When it reads "C5FFFFFF" the sword trail is toggled off.

64 is relatively unknown, but has something to do with a character's ground/air state.

8C simply toggles held item visibility.

Another thing to keep in mind is that these events are read in order, but the order they're read in depends on the jumps it makes with control events like 0C (set loop,) 10 (execute loop,) 14 (goto,) 18 (return,) and 1C (subroutine.) The gaps of time between event keyframes are determined by 04 (synchronous timer) and 08 (asynchronous timer)

What kind of changes did you have in mind?
 

Tyadran

Smash Cadet
Joined
Jan 21, 2016
Messages
25
Location
Ohio
NNID
Tyadran
Not every opcode has had its functionality accounted for yet, so unknown syntaxes are marked as "unknown" in Crazy Hand. They're easy enough to figure out though through experimentation.
B8 is a body aura assignment event, like what makes Roy flash colors during his up-B (in addition to particle GFX.) I just looked at it more closely as a function in dolphin, and its syntax is as follows
C4 is the event that toggles sword trails. When it reads "C5FFFFFF" the sword trail is toggled off.
64 is relatively unknown, but has something to do with a character's ground/air state.
8C simply toggles held item visibility.
Another thing to keep in mind is that these events are read in order, but the order they're read in depends on the jumps it makes with control events like 0C (set loop,) 10 (execute loop,) 14 (goto,) 18 (return,) and 1C (subroutine.) The gaps of time between event keyframes are determined by 04 (synchronous timer) and 08 (asynchronous timer)

What kind of changes did you have in mind?
Thanks for the info (wasn't exactly what I needed, I've done enough Brawl modding to get the gist of this stuff), it turns out Crazy Hand was just reading my Roy improperly? I loaded a new Roy DAT instead and everything looks fine. Probably should have tried that before I asked anything.

Since I'm a Roy player, I've always been frustrated with some of his inane hitboxes (specifically dair), and mostly I'm looking to fix some of those. In general, I want to shift him to a more purely horizontal playstyle in contrast to Marth's vertical one, and I'm looking into some ideas for a horizontal pseudo-chaingrab, or tech-chase chaingrab at the least, using f-throw or b-throw. I've also messed with his movement a little, making him a little faster but also cutting his aerial capabilities down further. I'm focusing on a ground game that emphasizes tilts and such instead of aerial combos.

But in any case, I want to get around to touching up a couple of characters. My first change since I didn't guess the Roy issue was changing C. Falcon's side-B to a multihitting electric move instead. I really like how it feels to use.

See some of the posts just above you~
Adding custom projectiles, adding vanilla projectiles, make Pichu's hurt event heal

In all cases they require custom subaction events, but are possible after they've been installed as codes.
Do I need to get the code manager to install these? I just haven't looked into it.

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

A few more questions:

1) The "Move Logic" option in Crazy Hand just freezes the program for me. Is this just my problem? It seems like it works for everyone else.

2) I've run into an issue where, every time I mess with C. Falcon's moves for more than a tiny amount, the game will start throwing errors when he tries to grab, right before the transition to a successful grab. Why is this happening? I've been careful not to change the total byte length of any of the modified moves, since I assume that isn't OK when it comes to Melee.

3) How would I go about allowing jump cancelling for a move? Is that some mysterious thing under "Move Logic" that I just can't access since it crashes for me? I want to do this for a number of actions, so it would be great if someone could explain that.

4) Last one, I promise: Do I have to keep each move the same length, or is there a way to extend it? I thought I saw something somewhere about pointing it to a different location via hex editing. I'd love to do that, but I'd need a more clear and detailed explanation than I ran across, because I've only done hex editing for one other game and I don't pick it up super fast.

Thanks for any help you can offer!

~Tya

EDIT:

Ignore the italicized questions. They seem to be issues incurred by using v1.00. Derp.
 
Last edited:

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
Thanks for the info (wasn't exactly what I needed, I've done enough Brawl modding to get the gist of this stuff), it turns out Crazy Hand was just reading my Roy improperly? I loaded a new Roy DAT instead and everything looks fine. Probably should have tried that before I asked anything.

Since I'm a Roy player, I've always been frustrated with some of his inane hitboxes (specifically dair), and mostly I'm looking to fix some of those. In general, I want to shift him to a more purely horizontal playstyle in contrast to Marth's vertical one, and I'm looking into some ideas for a horizontal pseudo-chaingrab, or tech-chase chaingrab at the least, using f-throw or b-throw. I've also messed with his movement a little, making him a little faster but also cutting his aerial capabilities down further. I'm focusing on a ground game that emphasizes tilts and such instead of aerial combos.

But in any case, I want to get around to touching up a couple of characters. My first change since I didn't guess the Roy issue was changing C. Falcon's side-B to a multihitting electric move instead. I really like how it feels to use.



Do I need to get the code manager to install these? I just haven't looked into it.

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

A few more questions:

1) The "Move Logic" option in Crazy Hand just freezes the program for me. Is this just my problem? It seems like it works for everyone else.

2) I've run into an issue where, every time I mess with C. Falcon's moves for more than a tiny amount, the game will start throwing errors when he tries to grab, right before the transition to a successful grab. Why is this happening? I've been careful not to change the total byte length of any of the modified moves, since I assume that isn't OK when it comes to Melee.

3) How would I go about allowing jump cancelling for a move? Is that some mysterious thing under "Move Logic" that I just can't access since it crashes for me? I want to do this for a number of actions, so it would be great if someone could explain that.

4) Last one, I promise: Do I have to keep each move the same length, or is there a way to extend it? I thought I saw something somewhere about pointing it to a different location via hex editing. I'd love to do that, but I'd need a more clear and detailed explanation than I ran across, because I've only done hex editing for one other game and I don't pick it up super fast.

Thanks for any help you can offer!

~Tya

EDIT:

Ignore the italicized questions. They seem to be issues incurred by using v1.00. Derp.
Sounds awesome!

It seems like you got this already, but just an FYI; pointers and other static RAM addresses are generally noted within the context of Melee 1.02.

Melee Code Manager isn’t required for codes (you can just use the gecko codes they’re usually shared as if you prefer,) but the difference in space it allows for compared to the default gecko code handler makes the advantage enormous in addition to convenient--so I’d recommend it if you’re working with a vanilla copy of Melee.

---

To do a jump cancel, I believe you can throw 800caed0 in the IASA function slot of a move on the move logic table to restrict input interrupts to only grounded jumps for the duration of the action state. You can also use the custom character data event to assign the same pointer to internal player data offset 0x219C and manually time an interrupt window.


And yes, you can extend the length of subaction event data length. If you subtract the header length of a Plxx.dat file (0x20 bytes) from an offset, you can use the resulting number to reference a location in the file via event 14 (goto) and later use event 18 (return) to return from where you came from. 1C (subroutine) acts like goto, but doesn't write a return that you can use. Crazy Hand conveniently lists these effective offsets with each event.

You'll have to test if it's safe or not, but there seems to be a bit of free space for Roy starting at effective offset 0x7970. So, if you write subaction events to that place in the .dat, they can be read by any subaction that includes an event that looks like this:

14000000 00007970

If you edit an existing 14 or 1C event to do this for you, then it should work without issue. If writing a new 14 or 1C event though, I think you need to modify the relocation table so that the location where you're referencing a new offset at is converted into a pointer once loaded into the game.


You can alternatively use the custom character data subaction event to do the same thing with static RAM addresses instead of .dat offsets. This is what I do, personally. If you do this, you can make decisions to gut things like the debug mode menu and/or tournament mode menu to net more bytes than you’ll ever need, and write to them with multiline static overwrites in MCM.

I believe the tournament mode menu region starts at 801910e0. (0x18DCC0, as a file offset)

So, similarly to how you'd do it with a goto event, write your new event data starting at that point in the DOL with whatever means you prefer. When it's written to the DOL, use the custom F8 event to access the internal player data offset that parses subaction events, and write your custom event location to it with this syntax:

F8FF000C 020003EC 801910E0
 

YershiBear

Smash Rookie
Joined
Jul 2, 2016
Messages
5
See some of the posts just above you~
Adding custom projectiles, adding vanilla projectiles, make Pichu's hurt event heal

In all cases they require custom subaction events, but are possible after they've been installed as codes.
How do I install custom codes to Crazy Hand v1.31, though?

Edit: Also, how do I make it so that moves can cancel into any other move at any time, similarly to MagicScrumpy's MASTER ARCHER video?
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Hey... are the values used in Graphic Effects signed?

From Itaru:

Common GFX format
28000000 AAAA0000 BBBBCCCC DDDDEEEE FFFFGGGG
This is common graphic effect format.

A is GFX number. (list)
B:Z-offset
C:Y-offset
D:X-offset
E:Range of scatter(about Z-axis)
F:Range of scatter(about Y-axis)
G:Range of scatter(about X-axis)
Crazy Hand reads all of these as unsigned 16-bit ints... but is that right? Are they actually signed?
 

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
Crazy Hand reads all of these as unsigned 16-bit ints... but is that right? Are they actually signed?
I took some heavy notes on the GFX event a while back. It looks like lha is used to load these 16-bit ints as signed values for ZYX-offset, but lhz for unsigned values are used for ZYX-scatter.

Here's a full list of arguments as they're extracted and passed to the real GFX function call, from best I can tell:

0 0x03FC0000 - r5 8-bit Bone ID
0 0x00020000 - r6 1-bit unknown1
0 0x00010000 - r7 1-bit unknown2
1 0xFFFF0000 - r4 16-bit GFX ID
1 0x0000FFFF - f1 16-bit unknown 3 (unsigned, cast as float)
2 0xFFFF0000 - r8->0x0 16-bit Z-offset (signed, cast as float)
2 0x0000FFFF - r8->0x4 16-bit Y-offset (signed, cast as float)
3 0xFFFF0000 - r8->0x8 16-bit X-offset (signed, cast as float)
3 0x0000FFFF - r9->0x0 16-bit Z-scatter (unsigned, cast as float)
4 0xFFFF0000 - r9->0x4 16-bit Y-scatter (unsigned, cast as float)
4 0x0000FFFF - r9->0x8 16-bit X-scatter (unsigned, cast as float)

The casted floats are converted into meleemeters before being stored in the stack as arrays and passed as pointers in r8 and r9.

How do I install custom codes to Crazy Hand v1.31, though?

Edit: Also, how do I make it so that moves can cancel into any other move at any time, similarly to MagicScrumpy's MASTER ARCHER video?
Melee Code Manager is the easiest way. You install the codes to the game rather than to Crazy Hand; extending parts of the game engine in ways that Crazy Hand can exploit. In MCM, you just need to copy the "Custom Event Codes" text file in the "codes" folder of crazy hand to your "Mods Library" folder in MCM to have the option to install these in your game.

You can also install them as gecko codes.

Edit: Also, canceling into any state at any time is probably not something you're going to want to do with file edits (it'd involve editing the move logic of every single move, I think.) I have a code called the Impossible Cancel that lets you do this with the L/R buttons though.
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Very helpful stuff, thanks man!

So if I understand you correctly, Crazy Hand should really be reading a 2's compliment signed value for the offsets, and it's already reading the "scatter" properly. Right?

And when you say unsigned float, do you just mean the unsigned integer value is cast into a standard, signed float? Maybe my knowledge of PowerPC is just limited, but I've never heard of any architecture that uses an unsigned float...
 

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
Very helpful stuff, thanks man!

So if I understand you correctly, Crazy Hand should really be reading a 2's compliment signed value for the offsets, and it's already reading the "scatter" properly. Right?

And when you say unsigned float, do you just mean the unsigned integer value is cast into a standard, signed float? Maybe my knowledge of PowerPC is just limited, but I've never heard of any architecture that uses an unsigned float...
Oops. Yeah, my bad. "Signed/unsigned ints that get cast into floats" is what should be saying. I've learned all my terminology mostly through context, so I make silly errors like that a lot when I take notes :S

To clarify, the 16-bit scatter values are loaded with lhz (unsigned halfword,) and the 16-bit offset values are loaded with lha (signed halfword.) These then get cast as floats.

So yeah, I think the scatter should be reading properly atm.
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Oops. Yeah, my bad. "Signed/unsigned ints that get cast into floats" is what should be saying. I've learned all my terminology mostly through context, so I make silly errors like that a lot when I take notes :S

To clarify, the 16-bit scatter values are loaded with lhz (unsigned halfword,) and the 16-bit offset values are loaded with lha (signed halfword.) These then get cast as floats.

So yeah, I think the scatter should be reading properly atm.
Sweet. And no biggie, I usually don't know anything about anything. I just throw around big words to sound smart.
 
Top Bottom