• 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

Zeppelin777

Smash Rookie
Joined
Aug 12, 2016
Messages
3
Is there a way to modify the character info that is located in the PAL or SD Remix alts of them from 20XX?
 

Guesmu

Smash Apprentice
Joined
Aug 20, 2015
Messages
76
Yea, you need to open GC rebulider, find the character file (file would be (Plxx.sAT) or for pal (plxx.pat)) export it, and hex edit it OR for crazy hand. Copy your iso, name .pat or .sat to .DAT and put it over plxx.DAT in the new iso. And when you are done editing it, take the .DAT file your want off the dumm iso, and name it to .pat or .sat in your other original iso, and add it.

Delete dummy iso.

Sorry for writing badly... I am tired...
 
Last edited:

Radical Larry

Smash Lord
Joined
Mar 19, 2014
Messages
1,994
Location
The Pocket Dimension
NNID
Crimson-Vulcan
3DS FC
1822-3761-9326
Hey, just quick question; I'm saving the character and whenever I'm bringing the save into load, it doesn't show the changes. What can I do to make sure that the changes stay when I load it back up on Crazy Hand?
 

Tyadran

Smash Cadet
Joined
Jan 21, 2016
Messages
25
Location
Ohio
NNID
Tyadran
Hey, questions:
1) Is there an IASA function to allow interrupt with air jumps? E.g. I want aerial Raptor Boost to be jump cancellable.
2) Is it possible to change the allowed interrupts for moves not in the move logic table? E.g. Allow Roy's jab to be interrupted by any other move instead of only movement?
 

Guesmu

Smash Apprentice
Joined
Aug 20, 2015
Messages
76
Hey, questions:
1) Is there an IASA function to allow interrupt with air jumps? E.g. I want aerial Raptor Boost to be jump cancellable.
2) Is it possible to change the allowed interrupts for moves not in the move logic table? E.g. Allow Roy's jab to be interrupted by any other move instead of only movement?
1) I think so, I have not tried that myself
2) Just add IASA (5C 00 00 00) over rumble or somthing. Hope I helped.
 

snuffysam

Smash Apprentice
Joined
Nov 13, 2012
Messages
101
I'm having an issue using the Achilles projectile spawning code. The stuff I overwrite gets removed, but the projectile spawning just doesn't work. I've tried a bunch of variations, but nothing seems to spawn.
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Walljump enable flags for each character are hardcoded in ASM. Use the following code to allow custom flags within the Pl__.dat files to enable (or disable!) walljumping for a character.

The flag is @ character attribute offset 0x148.

The default value of this attribute is 0.5 (a 32-bit floating point number) for all playable characters. Its definition can be stated as "the TopN difference between the previous two frames, needed to initialize the wallride byte counter (a necessity for walljumping)".

Capture.PNG


Default value:
0x3F000000 = 0.5

New values:
0x3F000001 = 0.5 and the character can walljump
0x3F000002 = 0.5 and the character cannot walljump (so you can take a walljump away from characters)

NOTE: Leaving this value as 0x3F000000 with the code below enabled just keeps the character as they are in vanilla Melee. If they had a walljump, they still have it. If they don't have a walljump, they still don't.

Code:
Custom Walljump Flag - Character Data Files (1.02) [Achilles]
C20816B8 00000007
83E3002C 3C608008
A0DF025A 2C060001
41820014 2C060002
40820018 60631918
48000008 606316C8
7C6803A6 4E800020
60000000 00000000
Code:
Custom Walljump Flag - Character Data Files (1.02) [Achilles]
inject @ 800816b8 - lwz r31,0x2c(r3)
- within Interrupt_Walljump function

lwz    r31,0x2c(r3)    # load internal data offset, default code line
lis r3,0x8008        # first half of possible branches within areas of the Interrupt_Walljump function
lhz    r6,0x25a(r31)    # load second half of TopN frame x-delta char attribute
cmpwi r6,1            # 3F000001 = character can walljump
beq-    CONTINUE_WALLJUMP_CHECK
cmpwi r6,2            # 3F000002 = character cannot walljump
bne-    END
NO_WALLJUMP:
ori r3,r3,0x1918     # setup branch to 0x80081918 which is the end of the Interrupt_Walljump function (so skip it)
b    GO

CONTINUE_WALLJUMP_CHECK:
ori r3,r3,0x16c8   # setup branch to skip over the check for the vanilla wallride enable flag
GO:
mtlr    r3     # go to the branch address in r3
blr
END:
I'm not sure if you can do this in Crazy Hand, but here is an easy way to find the location for the flag quickly using Master Hand.

Capture2.png

@Tater Ampers Ampers @MagicScrumpy god_cyndaquil god_cyndaquil Punkline Punkline @Implix
 
Last edited:

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
Achilles1515 Achilles1515 This is really creative!

Just to be sure I'm understanding correctly, you're taking advantage of the negligible error this causes in the existing float because the bit(s) are so insignificant to the original value?

There are a ton of flat looking float values in that whole character attributes table, so I think this has some pretty cool implications.
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Achilles1515 Achilles1515 This is really creative!

Just to be sure I'm understanding correctly, you're taking advantage of the negligible error this causes in the existing float because the bit(s) are so insignificant to the original value?

There are a ton of flat looking float values in that whole character attributes table, so I think this has some pretty cool implications.
Yes, exactly.
 

god_cyndaquil

Smash Rookie
Joined
Aug 18, 2015
Messages
16
Achilles1515 Achilles1515 wow I wasn't expecting this, a yes or no would have been fine for me, but you did all of this, and I really really really want to say thank you. Now lets see if I can understand it lol.

Also do you think this can be done in melee toolkit I'm thinking no but I have no idea how to use master hand
 
Last edited:

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
Achilles, you creative genius...
I'll add support for this in the next version of CH (which I hope will be available soon)
 

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
Ampers Ampers I'm excited for this new release! Thanks for all the work you're doing~

I'm having an issue using the Achilles projectile spawning code. The stuff I overwrite gets removed, but the projectile spawning just doesn't work. I've tried a bunch of variations, but nothing seems to spawn.
A lot of the projectiles don't work right in that code. To troubleshoot, try using this in place of the event you're having problems with and see if it spawns a stone projectile (which works well.)

F4FF002F 00000000 40003F80 3F8041A0

If the above works, then it may just be the ID or float values you're using aren't stable. If the above doesn't work, your code might not be installed correctly.

Hey, questions:
1) Is there an IASA function to allow interrupt with air jumps? E.g. I want aerial Raptor Boost to be jump cancellable.
2) Is it possible to change the allowed interrupts for moves not in the move logic table? E.g. Allow Roy's jab to be interrupted by any other move instead of only movement?
1) Well, I think you normally can with 800cb870, however Raptor Boost exhausts all of your jumps so the logic for that IASA function doesn't work out. You can use the custom character data event to add a jump back, but this could potentially give him a 3rd jump like his air down-B does--without the downtime.

2)You can normally use event 5C to toggle broader interrupts on normal (A-button) attacks, but jabs and aerials don't have any logic for transferring into specials.

You can use the custom character data event to override the IASA function of the current move to match a grounded wait state with the following 3-line syntax:

F8FF000C 0200219C 8008a4d4

This can be used with timer events to create an interrupt window within the context of your current action state.

---

A very related side-note: I'm interested in developing an extension of the 5C event.
Edit: typos, forgot to tag Achilles1515 Achilles1515 -- you think there's anything wrong with this idea? The 5C parse function looks as though it has nothing interpreted besides the opcode...

I think it has 26 bits available to extend the parsing syntax, and I want to add more useful interrupt features to it that might solve these kinds of problems in a way that fits into a 1-line syntax.

I'd like to make it capable of overriding the IASA function pointer, the Animation Interrupt function pointer, and also make it capable of passing an actionstate ID to the aerial attack action state function exploited by Dan's action state hack.

I think this could be done by giving it a 2-bit ID that defines the syntax function, in addition to its default blank syntax (5C000000) which is still untouched, and has 24 bits available for further extensions.

5D - Override IASA
5E - Override Animation Interrupt
5F - Force new action state

This would allow the functions to be used individually, or together by stringing multiple lines in sequence. Common/useful interrupts would be made available on an index, so they could be referenced by IDs instead of pointer addresses.

I'm interested to see if I can make the IASA syntax work as a bitfield that toggles up to 24 individual IASA interrupts that can be added together to build a sort of IASA filter.
Edit: as an arbitrary example, the syntax 5D000001 might amount to "can jump out of action state." 5D000021 would do the same and also include "can up-b out of actionstate." That sort of idea

An important feature would be the ability to have the parse hold onto the old event data pointer long enough to scan for multiple 5C lines adjacent to an action state change event (5F.) My hope is that in this way, it might be possible to assign IASA and animation interrupt logic to the new actionstates from entirely unrelated subactions.

I'll post a WIP in the codes section when/if I get any interesting results. WIP
 
Last edited:

Tyadran

Smash Cadet
Joined
Jan 21, 2016
Messages
25
Location
Ohio
NNID
Tyadran
1) Well, I think you normally can with 800cb870, however Raptor Boost exhausts all of your jumps so the logic for that IASA function doesn't work out. You can use the custom character data event to add a jump back, but this could potentially give him a 3rd jump like his air down-B does--without the downtime.
I'd noticed the jump burn when I tested with simply eliminating special fall - is there a way to stop it from exhausting your air jump, or is that not currently possible? I'm fine with it as it is, I suppose, but it wasn't quite what I wanted. And I'm definitely not wanting it to be exploitable for infinite jumps, that would be ridiculous.

2)You can normally use event 5C to toggle broader interrupts on normal (A-button) attacks, but jabs and aerials don't have any logic for transferring into specials.

You can use the custom character data event to override the IASA function of the current move to match a grounded wait state with the following 3-line syntax:

F8FF000C 0200219C 8008a4d4

This can be used with timer events to create an interrupt window within the context of your current action state.
Okay, interesting. Mainly I just want to make sure I'll be able to allow jab > IASA > grab and f-tilt > IASA > grab, although it should also work with a short walk beforehand anyway.

Next round of questions:
1) What's the IASA for an aerial wait state? I.e., one that could be airdodged out of? I've been trying to get Young Link's AirSpecialNEnd to autocancel for a while now, but I don't think it's going to work. My next best idea is to make it wavelandable.
2) Better yet, is there a catalog of these states somewhere, or is there a relatively easy way to find them myself? I'm still pretty blind here and would like to not have to ask for these kinds of things constantly.
3) You keep talking about the "custom character data event", but I don't really know what that is. Is that a custom event I need to install, or is it something I can already do and am overlooking?

Sorry for all the questions! I just have a lot of ideas and don't yet have the knowledge to follow them through.
 
Last edited:

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
Next round of questions:
1) What's the IASA for an aerial wait state? I.e., one that could be airdodged out of? I've been trying to get Young Link's AirSpecialNEnd to autocancel for a while now, but I don't think it's going to work. My next best idea is to make it wavelandable.
2) Better yet, is there a catalog of these states somewhere, or is there a relatively easy way to find them myself? I'm still pretty blind here and would like to not have to ask for these kinds of things constantly.
3) You keep talking about the "custom character data event", but I don't really know what that is. Is that a custom event I need to install, or is it something I can already do and am overlooking?
Sorry, I linked to the custom character data event earlier on. It’s a code that lets you do memory edits (via custom subaction event syntax) to a plethora of player data variables usually reserved to ASM hacks. (see the “START Player Character Data” section in the Char Data Offsets tab)

---

Let me try to go over how I've been nabbing these pointers. The spoiler below contains a list of interrupts you can experiment with. I haven't tried most of them.

If you create a shortcut to Dolphin and include -d at the end of the shortcut target, you can start Dolphin in debug mode.

The way I've been grabbing these IASA pointers is by putting a couple of breakpoints around the blrl instruction at 8006b808. If you do this by pasting that pointer in the address field and clicking next to the address to make a red square, then the emulation will pause every time the breakpoint tries to execute and you can either step into the blrl with the step button or grab the pointer from r12 to see what the IASA logic of the current action state is in your emulation. You can do the exact same thing with a breakpoint at 8006ab74 to find Animation interrupt pointers.

In Dolphin, functions like these can be given symbol names, and so it's useful to download the Community Symbol Map when looking at the code tab in Dolphin. Achilles has contributed a lot of symbol names for action state transition functions, as well as many of the interrupts used by move logic.

I'll post some that I can see here, so people can easily experiment with the IASA function pointer. From this list, I think you can get away with using ac_Interrupt_AS_Fall (800ccaac) or either fall prefunction to get the IASA of an aerial wait state. A more specific function like ac_Interrupt_AS_EscapeAir_Airdodge (80099c24) might be what you're after though.

Edit: I just double checked all these, and it seems I had Jump_Grounded, AS_TurnRunActualChecks, ItemCatch8FrameBufferEnableCheck, and Grab_Standing offset by 4 for some reason. I've updated the list with corrections:

Code:
8007d528 : ac_Interrupt_Fastfall_CheckToExecute
80081298 : ac_Interrupt_CliffCatch
8008169c : ac_Interrupt_Walljump
8008a4d4 : ac_Interrupt_AS_Wait
8008bfc4 : ac_Interrupt_F-Smash
8008c830 : ac_Interrupt_UpSmash
8008c948 : ac_Interrupt_UpSmash/LightThrowHi_FromKneebend
8008cad4 : ac_Interrupt_AS_Wait_CheckIASAflagforEnabledFirst
8008d08c : ac_Interrupt_AS_AttackAirN
8008d194 : ac_Interrupt_AS_AttackAirF
8008d29c : ac_Interrupt_AS_AttackAirB
8008d3a4 : ac_Interrupt_AS_AttackAirHi
8008d4ac : ac_Interrupt_AS_AttackAirLw
80090828 : ac_Interrupt_AS_DamageFall_Tumble
80091a2c : ac_Interrupt_Check
80092758 : ac_Interrupt_AS_Shielding
80093694 : ac_Interrupt_GuardReflect
80094e54 : ac_Interrupt_Item_CheckInstantAForThrow
80095328 : ac_Interrupt_ItemCheckForSomething
80096540 : ac_Interrupt_Side-B_Grounded
8009665c : ac_Interrupt_BbuttonInstant&Battacks
80096af4 : ac_Interrupt_AS_SpecialFall
8009802c : ac_Interrupt_AS_DownWaitU/D
800980bc : ac_Interrupt_DownStandU/D
80098214 : ac_Interrupt_DownBack/ForwardU/D
80098400 : ac_Interrupt_DownAttackU/D_FromDownBound
800984d4 : ac_Interrupt_DownAttackU/D_FromDownBoundWait
80098730 : ac_Interrupt_NeutralTech
80098928 : ac_Interrupt_TechRollF/B
8009917c : ac_Interrupt_Roll
80099264 : ac_Interrupt_Roll_OnlyCheckForL/R
80099794 : ac_Interrupt_SpotDodgeWithShieldHeldCheck
8009980c : ac_Interrupt_SpotDodge
80099a58 : ac_Interrupt_EscapeAir_Airdodge
80099c24 : ac_Interrupt_AS_EscapeAir_Airdodge
8009a080 : ac_Interrupt_ShieldDrop
8009a3c8 : ac_Interrupt_LedgeTeeter
8009a8fc : ac_Interrupt_AS_CliffWait
8009b170 : ac_Interrupt_CliffJump
8009eda4 : ac_Interrupt_StopWall
8009ef68 : ac_Interrupt_StopCeil
800c1d38 : ac_Interrupt_Edge/WalljumpTeching
800c23a0 : ac_Interrupt_CeilingTech
800c9618 : ac_Interrupt_AS_WalkSlow/Middle
800c97dc : ac_Interrupt_Turn
800c9cec : ac_Interrupt_TurnRun_KeepSameFrame
800c9d40 : ac_Interrupt_TurnRun
800c9ed8 : ac_Interrupt_AS_TurnRun
800ca094 : ac_Interrupt_TurnOrDash
800ca230 : ac_Interrupt_AS_Dash
800ca5f0 : ac_Interrupt_Run
800ca644 : ac_Interrupt_Run_Again
800ca830 : ac_Interrupt_AS_Run
800CAE80 : ac_Interrupt_JumpCheckInputOnly
800CAED0 : ac_Interrupt_Jump_Grounded
800caf78 : ac_Interrupt_AS_TurnRunActualChecks
800cb024 : ac_Interrupt_GroundJumpFromShield
800cb334 : ac_Interrupt_AS_JumpF
800cb5fc : ac_Interrupt_AS_Kneebend
800cb870 : ac_Interrupt_AerialJumpGoTo
800cb950 : ac_Interrupt_AerialJump
800ccaac : ac_Interrupt_AS_Fall
800ccd34 : ac_Interrupt_AS_Fall_Prefunction
800cce50 : ac_Interrupt_AS_Fall_Prefunction2
800d5d78 : ac_Interrupt_AS_Landing
800d5f84 : ac_Interrupt_JoystickDownRevivalPlatFall
800d5fb0 : ac_Interrupt_Squat
800d65d8 : ac_Interrupt_SquatReverse
800d6694 : ac_Interrupt_AS_SquatReverse
800d6824 : ac_Interrupt_Neutral-B_Grounded
800d688c : ac_Interrupt_Down-B_CheckInputOnly
800d68c0 : ac_Interrupt_Down-B_Grounded
800d6928 : ac_Interrupt_Up-B_CheckInputOnly
800d695c : ac_Interrupt_Up-B_Grounded
800D705C : ac_Interrupt_ItemCatch8FrameBufferEnableCheck
800d7100 : ac_Interrupt_CatchItem
800D8990 : ac_Interrupt_Grab_Standing
800d8a38 : ac_Interrupt_Grab_FromRun
800d8b9c : ac_Interrupt_CatchDash
800de9b8 : ac_Interrupt_D-PadUpInstantPressed?
800de9d8 : ac_Interrupt_Taunt
800e6adc : ac_Interrupt_Fox_AS_NeutralB_CheckForBbuttonPress


I'd noticed the jump burn when I tested with simply eliminating special fall - is there a way to stop it from exhausting your air jump, or is that not currently possible?
I took a quick look, and it would appear that the jump burn happens as a call during what I'm assuming is his character-dependent AS transition (800e33e0)

This function is specific to loading action state 15f (>154 is character dependent) and is referenced by the game from static lookup table (803c1574) that uses CHIDs 02 and 19 (Cfalcon and Ganondorf) as an index key for the “BbuttonInstant&Battacks” interrupt check blrl instruction at 800967dc

I didn't see any conditions or variables behind it, so it looks like a hardcoded effect. You can nop it with this code to get rid of it:

$CFalcon and Ganondorf keep jumps during side-B [Punkline]
040e34f0 60000000
 
Last edited:

Tyadran

Smash Cadet
Joined
Jan 21, 2016
Messages
25
Location
Ohio
NNID
Tyadran
$CFalcon and Ganondorf keep jumps during side-B [Punkline]
040e34f0 60000000
Okay, so I'm probably just really stupid, but I can't figure out how to put that into MCM. Unless I'm just supposed to hex it in myself? Feeling like a real idiot here.
 

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
Okay, so I'm probably just really stupid, but I can't figure out how to put that into MCM. Unless I'm just supposed to hex it in myself? Feeling like a real idiot here.
Oh that's just a gecko code. An 04 nop like that code is simple enough to just kind of type out if you know the instruction location, so I hadn't run it through MCM yet. You can use gecko codes in Dolphin by right clicking a game, going to properties, and hitting "edit config." You can paste that 04 code in the text to have it appear as a toggleable code afterwards. This is also how you install C2 codes (like the format of gecko code the custom character data event is shared in)

FYI, the 04 portion of the code is the address, and the line following it is the instruction you want put at that address. So if you ever see an 04 code you can quickly add it to MCM with this gui as a "static overwrite." Static overwrites are nice in MCM because they take up no extra space.

You can copy this to any text file in your MCM mods library folder to add it to your "static overwrites" tab:

Code:
-==-


CFalcon and Ganondorf keep jumps during side-B
Prevents the side-B action state from consuming all remaining jumps.
Does not stop special falling state.
[Punkline]
Version -- DOL Offset ------ Hex to Replace ---------- ASM Code
1.02 ----- 0x800e34f0 --- 4BF9A11D -> 60000000
 
Last edited:

Tyadran

Smash Cadet
Joined
Jan 21, 2016
Messages
25
Location
Ohio
NNID
Tyadran
Punkline Punkline Thanks for putting up with all these questions - I finally got the move functioning like I wanted it to. XD

Here's a video of it in action as thanks:
 

Guesmu

Smash Apprentice
Joined
Aug 20, 2015
Messages
76
Punkline Punkline Thanks for putting up with all these questions - I finally got the move functioning like I wanted it to. XD

Here's a video of it in action as thanks:
Awesome dude!

It would be really cool of applied it to each special move, then make a turbo mod compilation. XD
 

Ampers

Smash Journeyman
Joined
Feb 2, 2015
Messages
237
Location
St. Louis, MO
oh btw I wanted to share the dankest Melee mod that has ever been made:

Code:
KO Star counter counts your SD's (1.02) [Ampers aka Swagmasta420]
041a5fcc 889E0063

(this has nothing to do with Crazy Hand or character modding but it's my thread, I can do whatever I want)
 
Last edited:

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
Punkline Punkline Thanks for putting up with all these questions - I finally got the move functioning like I wanted it to. XD

Here's a video of it in action as thanks:
Oh this is excellent! Well done~

I'm happy to share what I know about this arcane stuff. Frankly, I'm still learning too--and answering those questions taught me a couple things about interrupts.


oh btw I wanted to share the dankest Melee mod that has ever been made:

Code:
KO Star counter counts your SD's (1.02) [Ampers aka Swagmasta420]
041a5fcc 889E0063

(this has nothing to do with Crazy Hand or character modding but it's my thread, I can do whatever I want)
lol. This reminds me of an experiment I had going a few months ago, where I was testing different cancel methods outside of the normal interrupt system and managed to make it so I could cancel my death animation in order to rack up SDs by wiggling around in the blast zone.

Speaking of canceling death animations, Ampers Ampers @Tater is there any reason that common action states (character-independent action states, like those listed by name/ID in the SSBM Data Sheet) aren't included in the move logic table?

It seems to start in at static address 803C2800, (Edit - dol offset 0x3BF800) and is just a 0x20 byte aligned array of move data indexed by action state ID. 0'd out pointers use no logic, and FFFFFFFF slots use no "animation ID" (called a subaction ID in the move logic table--I'm not sure what the correct term is. See internal player data offset 0x14 on the Data Sheet)

Here's how the actionStateChange function uses a player data pointer (r26) to find a block of move data from a given action state ID (r24)

Internal player data offset 0x1C seems to always hold a pointer to this static 803C2800 address. I'm almost certain that changes to this move logic table are shared between all characters, but I haven't actually tested that yet.
 
Last edited:

Itaru

MasterGanon
Joined
Jun 25, 2014
Messages
279
Location
日本 茨城県
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
0x7970 of Roy's file is not a free space.
http://smashboards.com/posts/20579983/
 

mamimami

Smash Rookie
Joined
Jan 13, 2016
Messages
18
Location
My house
Are you still working on this?
I read somewhere you can edit stuff but not add, it would be great if you could add that as a feature
 

snuffysam

Smash Apprentice
Joined
Nov 13, 2012
Messages
101
A lot of the projectiles don't work right in that code. To troubleshoot, try using this in place of the event you're having problems with and see if it spawns a stone projectile (which works well.)

F4FF002F 00000000 40003F80 3F8041A0

If the above works, then it may just be the ID or float values you're using aren't stable. If the above doesn't work, your code might not be installed correctly.
I'm using the gui, and I'm not entirely sure where to put codes like that. But, regardless:

I attempted to spawn the stone projectile (with the gui), but nothing seems to happen- whether I launch the projectile or give it to the player.

Now what? I don't think it's Crazy Hand itself that's installed incorrectly, because other modifications work (for example, the hitbox I replaced with the projectile event is indeed missing when I play the game). And I thought the projectile code was packaged in with Crazy Hand already? Unless it's just direction code injection that's working, and the gui isn't fully functional yet? But that doesn't seem quite right either.

Do I just put it alongside frame speed modifiers on the "list of things that don't work in Crazy Hand for me inexplicably"?
 

Dr. D

Smash Rookie
Joined
May 3, 2012
Messages
10
Location
Charlotte, NC
Hello,

I've been digging through the forums and I suppose this is the best place to ask this. I am trying to have a similar functionality to 20xx 4.05 where you can press L or R on the dpad to select SD Remix or Pal. I'm not trying to make it do just that, I have custom characters I'm trying to add and not overwrite the base character. Any help or push in the right direction is much appreciated! I have my own mod that im learning with, not trying to just change 20xx.
 

mamimami

Smash Rookie
Joined
Jan 13, 2016
Messages
18
Location
My house
Hello,

I've been digging through the forums and I suppose this is the best place to ask this. I am trying to have a similar functionality to 20xx 4.05 where you can press L or R on the dpad to select SD Remix or Pal. I'm not trying to make it do just that, I have custom characters I'm trying to add and not overwrite the base character. Any help or push in the right direction is much appreciated! I have my own mod that im learning with, not trying to just change 20xx.
That doesn't have anything to do with Crazy Hand, in 20XX's Thread it says how to do that, if not, just PM Achilles
 

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
I'm using the gui, and I'm not entirely sure where to put codes like that. But, regardless:

I attempted to spawn the stone projectile (with the gui), but nothing seems to happen- whether I launch the projectile or give it to the player.

Now what? I don't think it's Crazy Hand itself that's installed incorrectly, because other modifications work (for example, the hitbox I replaced with the projectile event is indeed missing when I play the game). And I thought the projectile code was packaged in with Crazy Hand already? Unless it's just direction code injection that's working, and the gui isn't fully functional yet? But that doesn't seem quite right either.

Do I just put it alongside frame speed modifiers on the "list of things that don't work in Crazy Hand for me inexplicably"?
For these custom events, I believe you must install them yourself. There's a text file packaged with CH you can drag to your MCM Mods Library to make them available for modding the game ISO. See this part of the last CH update post:

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.
Edit: also, to enter events that are pure hex like that, click the "use raw data for subactions" checkbox option
 
Last edited:

snuffysam

Smash Apprentice
Joined
Nov 13, 2012
Messages
101
For these custom events, I believe you must install them yourself. There's a text file packaged with CH you can drag to your MCM Mods Library to make them available for modding the game ISO. See this part of the last CH update post:



Edit: also, to enter events that are pure hex like that, click the "use raw data for subactions" checkbox option
Oh, it's windows only. Never mind then.
 

Spawn_32

Smash Rookie
Joined
Dec 14, 2015
Messages
14
So I was wondering what exactly makes Captain Falcon's running -> jump be a higher speed than normal?
Okay so obviously I'm guessing Jump H Max Velocity which is 2.1
But getting to this velocity would be based on Jump H Initial Velocity which is like 0.95 or something, plus the Ground to Air H Momentum Multiplier, which is 0.75 for Falcon.

But is there anything else that controls why Captain Falcon can go faster than "Maximum Aerial Speed" when running?
I'm looking into this to know if there's some way I could mod this into Smash 4 where even after messing with all those values he still can't go faster than his Max. Aerial Speed.
I was wondering if in Melee he can go faster because of some parameter, if so maybe I could mod it into Smash 4 if it's not directly related to the engine
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
So I was wondering what exactly makes Captain Falcon's running -> jump be a higher speed than normal?
Okay so obviously I'm guessing Jump H Max Velocity which is 2.1
But getting to this velocity would be based on Jump H Initial Velocity which is like 0.95 or something, plus the Ground to Air H Momentum Multiplier, which is 0.75 for Falcon.

But is there anything else that controls why Captain Falcon can go faster than "Maximum Aerial Speed" when running?
I'm looking into this to know if there's some way I could mod this into Smash 4 where even after messing with all those values he still can't go faster than his Max. Aerial Speed.
I was wondering if in Melee he can go faster because of some parameter, if so maybe I could mod it into Smash 4 if it's not directly related to the engine
https://www.reddit.com/r/smashbros/comments/2fwhv5/why_is_your_momentum_lost_while_jumping_still/

This is a question for Sakurai.
 
Last edited:

StarPlatinum70

Smash Rookie
Joined
Aug 21, 2016
Messages
23
I used Crazy Hand to make the modifications I want, and saved it as a .DAT file. How do I save it to a melee ISO and play it?
 
Top Bottom