New Melee Syntax school. You can WRITE character commands now!!

Nuthilo

Smash Cadet
Joined
Dec 6, 2016
Messages
34
It's the code at the end of the post you quoted. If you install that gecko code, the syntax you tried earlier should heal.

Alternatively, there's a version of the code included with Crazy Hand that you can install using MCM.
This looks awesome and I'd love to use it, but there's no download link I can find :( Did I just miss it?
 

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
379
This looks awesome and I'd love to use it, but there's no download link I can find :( Did I just miss it?
For MCM, the download link is tucked away in one of the spoilers in the explanation. When you find it and install it, you'll be able to copy the MCM text files included with the Crazy Hand download into the MCM "mods library" folder. It really makes installing codes a lot easier, and allows you to organize codes onto a custom ISO.

---

If instead you want to try the gecko code at the end of the post you quoted, in Dolphin right click on a game to open "properties." Then click on the "Gecko Code" tab and select "Edit Config." This will open a text file where you can paste the code and save the config, which will cause the code to appear as a toggle from the Gecko Codes menu.
 

SGRade

Smash Rookie
Joined
Jan 22, 2017
Messages
2
Modified Subaction Event - Damage Self or Heal Self (1.02) [Achilles]

CC00XXXX = damage self XXXX%
CC01XXXX = heal self XXXX%


Code:
Modified Subaction Event - Damage Self or Heal Self (1.02) [Achilles]
04072c1c 60000000
04072c20 60000000
04072c18 60000000
C2072C14 00000007
89C40001 A0840002
8063002C 2C0E0001
40820024 3CA08006
60A5CF5C 7CA903A6
4E800421 3CA08007
60A52C3C 7CA903A6
4E800420 00000000
@MagicScrumpy @Tater @Ampers @ Itaru Itaru
When I use crazy hand to change the self damage CC 00 00 01 to CC 01 00 01 it just self damages me 999 as if it wasn't installed
 
Last edited:

The Cape

Smash Master
Joined
May 16, 2004
Messages
4,478
Location
Carlisle, PA
Ganon U Smash at 0:09 has a great effect I would like to use. What is that?

Found it with your awesome syntax layout
 
Last edited:

Super4ng

Smash Journeyman
Joined
Jun 22, 2014
Messages
261
Location
Mississippi
I hope this is an easy question, I am trying to remove the sound effect on mario's first/grounded jump. This is because this same sound effect is used for his spot dodge and air dodge, so when wavedashing having the same sound clip play twice is a little redundant (for example, I replaced Luigi's air dodge sound effect to match his ledge attack). Whenever I try to delete the sound effect on mario's jump however, it still plays the same sound effect as if it were unchanged. Is there anything I am missing?

Also, what is the best way to find the sound ID's for individual smash attack sound effects? I understand they are played randomly but I don't know how or where to look to find them individually.
 
Last edited:

Itaru

MasterGanon
Premium
Joined
Jun 25, 2014
Messages
277
Location
日本 千葉県
I hope this is an easy question, I am trying to remove the sound effect on mario's first/grounded jump. This is because this same sound effect is used for his spot dodge and air dodge, so when wavedashing having the same sound clip play twice is a little redundant (for example, I replaced Luigi's air dodge sound effect to match his ledge attack). Whenever I try to delete the sound effect on mario's jump however, it still plays the same sound effect as if it were unchanged. Is there anything I am missing?

Also, what is the best way to find the sound ID's for individual smash attack sound effects? I understand they are played randomly but I don't know how or where to look to find them individually.
Unfortunately, I don't know too. It is very weird.

About random smash SFX, sound debug menu is useful.
The order of sound debug menu is the same as SFX number.
 

Super4ng

Smash Journeyman
Joined
Jun 22, 2014
Messages
261
Location
Mississippi
Unfortunately, I don't know too. It is very weird.

About random smash SFX, sound debug menu is useful.
The order of sound debug menu is the same as SFX number.
Hmm, so I have the sound debug menu open, but I'm not sure if I fully understand what you meant. Is the first sound file I play under the character is 00001 or something?
 

Itaru

MasterGanon
Premium
Joined
Jun 25, 2014
Messages
277
Location
日本 千葉県
Hmm, so I have the sound debug menu open, but I'm not sure if I fully understand what you meant. Is the first sound file I play under the character is 00001 or something?
For example, you know SFX number of mario's Air dodge or jump, 0x2BF5A.
Here is sound debug menu.
mario1.png

And, next sound is...

Mario2.png

This is Bigmario's jump sound.
Now, you know Bigmario jump sound is 0x2BF5B.
 
Joined
Nov 9, 2014
Messages
652
I hope this is an easy question, I am trying to remove the sound effect on mario's first/grounded jump. This is because this same sound effect is used for his spot dodge and air dodge, so when wavedashing having the same sound clip play twice is a little redundant (for example, I replaced Luigi's air dodge sound effect to match his ledge attack). Whenever I try to delete the sound effect on mario's jump however, it still plays the same sound effect as if it were unchanged. Is there anything I am missing?

Also, what is the best way to find the sound ID's for individual smash attack sound effects? I understand they are played randomly but I don't know how or where to look to find them individually.
Unfortunately, I don't know too. It is very weird.

About random smash SFX, sound debug menu is useful.
The order of sound debug menu is the same as SFX number.
Mario's jump sound effect ID is located at 0x25c8 in PlMr.dat

Edit:

Some other info in PlMr.dat

 
Last edited:
Joined
Nov 9, 2014
Messages
652
Some new subaction events I made yesterday,

Code:
$Turnaround Subaction Event [UnclePunch]
*Example = 33XX00YY
*XX = 00 or 01 // 00 = end of AS // 01 = immediately
*YY = frames to complete immediate turnaround
C20718A4 00000009
81DD0008 89EE0000
2C0F0053 40820034
89EE0001 2C0F0001
41820014 C03E002C
FC200850 D03E002C
4800000C 89EE0003
91FE18F4 39CE0004
91DD0008 4E800020
80A40008 00000000
e.g. 53 01 00 07
53 = custom turnaround ID
01 = immediate turnaround
00 = nothing
07 = 7 frames until turnaround completes

Code:
$Interrupt Swap Subaction Event v1.1 [UnclePunch]
*Syntax = 33XX0000 YYYYYYYY
*XX = 00,01,02 / 00 = IASA Function / 01 = Physics Function / 02 = Collision Function
*YYYYYYYY = Move Logic Function
C207162C 0000000C
81DD0008 89EE0000
2C0F0033 4082004C
808E0004 89EE0001
2C0F0000 41820018
2C0F0001 41820018
2C0F0002 41820018
48000028 909E219C
48000014 909E21A4
4800000C 909E21A8
48000004 39CE0008
91DD0008 4E800020
7C0802A6 00000000
basically allows you to set interrupts in the subaction

eg, ganon can jump cancel downsmash after frame X




Reflect and Absorb event coming soon
 
Last edited:
Joined
Jun 25, 2017
Messages
49
Modified Subaction Event - Damage Self or Heal Self (1.02) [Achilles]

CC00XXXX = damage self XXXX%
CC01XXXX = heal self XXXX%


Code:
Modified Subaction Event - Damage Self or Heal Self (1.02) [Achilles]
04072c1c 60000000
04072c20 60000000
04072c18 60000000
C2072C14 00000007
89C40001 A0840002
8063002C 2C0E0001
40820024 3CA08006
60A5CF5C 7CA903A6
4E800421 3CA08007
60A52C3C 7CA903A6
4E800420 00000000
@MagicScrumpy @Tater @Ampers @ Itaru Itaru
How do you install this on dolphin?
 

Stormghetti

Smash Journeyman
Joined
Aug 23, 2015
Messages
381
Location
Spain
NNID
Stormghetti
How do you install this on dolphin?
Right click the ISO > Properties > go to the Gecko Codes tab > Show Defaults then go all the way down inside of the text file that opened, add one empty line and then paste the code (don't forget to add the dollar sign $ before the name of the code).

And then the rest is done in Crazy Hand by following the examples above.
 

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
379
I’ve updated my old post in this thread about subaction event functions with new information concerning the color events I formerly called “unkFX” events.



For the most part, I've studied these from data that resides in PlCo.dat. I believe that is where many "body auras" are defined using this event system:

Code:
80014258    $!_SAevent_Parse_Color

# generic color events: list @803BA248
80013bb0    $!_SAeventColor_00-[28]-Terminate_color_update
80013bb8    $!_SAeventColor_01-[2C]-Sync_Timer_INT
80013be4    $!_SAeventColor_02-[30]-Disable_Light_and_Overlay
80013c18    $!_SAeventColor_03-[34]-Set_New_Light
80013d68    $!_SAeventColor_04-[38]-Set_Light_Color
80013e3c    $!_SAeventColor_05-[3C]-Set_Light_Blend_Rate
80013f78    $!_SAeventColor_06-[40]-Set_Light_Position
80013ff0    $!_SAeventColor_07-[44]-Disable_Light
80014014    $!_SAeventColor_08-[48]-Set_New_Overlay
800140f8    $!_SAeventColor_09-[4C]-Set_Overlay_Blend_Rate
80014234    $!_SAeventColor_0A-[50]-Disable_Overlay

---

800bff34    $!_SAevent_Parse_ColorPlayer

# extra events for fighters: list @803C6AD0

800bfe74    $!_SAeventColorPlayer_00-[54]-Spawn_GFX
800bfeb4    $!_SAeventColorPlayer_04-[58]-Spawn_SFX
800bfef4    $!_SAeventColorPlayer_08-[5C]-unkFlag

Caller: 
800c0408     Ab_Knockback+HitEffects_Unknown4

---

800bff70    $!_SAevent_Parse_ColorPlayerSkip

# extra events for skipping fighter events: list @803C6ADC

800BFE94    $!_SAeventColorPlayerSkip_00-[54]-5word
800BFED4    $!_SAeventColorPlayerSkip_00-[58]-3word
800BFF14    $!_SAeventColorPlayerSkip_00-[5C]-1word

---

80021c18    $!_SAevent_Parse_ColorScreenFlash

# This is literally just a blr.
# There is no extra index of opcodes for screen flashes,
# so this blr instruction is passed in place of a new parse function.

Caller:
80021c80 

---

801c9664    $!_SAevent_Parse_ColorWorld

# extra events for world color events: @r13 - 0x‭7134‬ (804D456C)

# events are determined by variables, and may change depending on stage

Caller:
801c9698 

---

80279b30    $!_SAevent_Parse_ColorItem

# extra events for item color events: @r13 - 0x‭64D8‬ (804D51C8)

# events are determined by variables, and may change depending on item

Caller:
80279be0
Here are some more details:

[28] - 1word - Terminate Color Update
@80013bb0
no syntax
# use this to end a color event, like you were using "00 00 00 00"
# -- using this in place of null will prevent the color register from further updating its object


[2C] - 1word - Synchronous Timer (int-based)
@80013bb8
0: 03FFFFFF = add to timer
# use this to set the color register timer, in place of [04] or [08] events

[30] - 1word - Disable Light/Overlay Colors
@80013be4
no syntax
# use this to disable the effects of an existing aura color/light

[34] - 2word - Set Light Position and Color
@80013c18
0: 02000000 = set flag (20)
0: 00FFF000 = set light X (SINT)
0: 00000FFF = set light Y (SINT)
1: FFFFFFFF = RGBA
# use this to set a new light, with both position and color info
# -- sets blend rates to 0


[38] - 2word - Set Light Color
@80013d68
1: FFFFFFFF = RGBA
# use this to just set the light's color to a new color
# -- sets blend rates to 0


[3C] - 2word - Set Light Blend Rate
@80013e3c
0: 03FFFFFF = blend rate
1: FFFFFFFF = target RGBA
# use this to adjust light to a new color by blending it over time
# -- blend rates will persist beyond specified number of frames, and can overflow to create a blink effect


[40] - 1word - Set Light Position
@80013f78
0: 01FFE000 = Light X
0: 00001FFF = Light Y
# use this to adjust light XY position, relative to GObj

[44] - 1word - Disable Light
@80013ff0
no syntax
# disable just the light effect

[48] - 2word - Set Overlay Color
@80014014
1: FFFFFFFF = RGBA
# use this to set overlay to a new color
# -- sets blend rates to 0


[4C] - 2word - Set Overlay Blend Rate
@800140f8
0: 03FFFFFF = blend rate
1: FFFFFFFF = RGBA
# use this to adjust overlay to a new color by blending it over time
# -- blend rates can create aforementioned blink effect


[50] - 1word - Disable Overlay
@80014234
no syntax
# disable just the overlay effect

---

Unlike other event parsers; the color event parser can read in a tertiary opcode list as an argument from its caller. This allows it to append the default opcodes based on what type of object is being colored.

For players, this list is constant, and can be used to create GFX and SFX within the aura loops used for things like body auras:

[54] - 5word - Spawn Player GFX
@800bfe74
# syntax is exactly the same as player event [28]

[58] - 3word - Spawn Player SFX
@800bfeb4
# syntax is exactly the same as player event [44]

[5C] - 1word - unk flag
@800bfef4
# syntax is exactly the same as player event [E4]

This particular detail about the color event system creates some pretty interesting implications about how event systems can be run simultaneously in parallel.

For other GObjs -- like those used by items and stages -- these extra opcodes appear to be variables. Screen flashes do not have any extra opcodes, and use a blr instruction in place of a tertiary opcode function. To see how the color event parser handles these, use breakpoints on the described functions during the following in-game scenarios to create examples:

Items - launch from a barrel cannon
Stages - lighting transition in underground maze, in adventure mode -- when fighting Link.

---

From this new information, it would seem that moveset scripts, projectile scripts, player aura lights/colors, item aura lights/colors, screen flashes, and some world lighting transitions are all handled (in part) by a common event system.

An event operation in this system is simply a function designed to read a chunk of data that contains arguments; and then do something with those arguments. Each function is indexed as a callback on a pointer table contained in the data section of Start.dol, and a unique parser function is given one of these pointer lists in order to create a system of opcodes. The lists can be concatenated, and all of the various event systems share a common set of control events in addition to any operations that might be defined for specific purposes.

Each chunk of data to be parsed by one of these systems includes a 6-bit opcode that tells its parser what kind of operation it is. The parser uses this opcode to identify a callback function from its assembled opcode list, and sends the data chunk to its corresponding function using an event pointer. When the operation is done, the parser moves onto the next chunk of data until it either terminates or hits a delay instruction.

The subaction event data that can be seen in Crazy Hand is merely one example how this system can be utilized.

---

For each of these common event systems, a small control structure is used to keep parser variables persistent between frames:
Code:
Event controller:
0x00    Event Timer (float)
0x04    Event Frame Counter (float)
0x08    Pointer to Next Event Op
0x0C    Memory Count
0x10    Control Memory 0
0x14    Control Memory 1
0x18    Control Memory 2
0x1C    Control Memory 3
0x20    Control Memory 4
The event timer and frame counter variables are used to store timer information. The pointer stores the current place being parsed in-between frames. The memory count keeps track of how many pieces of control memory are currently stacked. The control memory stores return pointers, and loop counters.

Player GObjs (aka “player entities”) have data tables that contain these control structures as a part of their format -- allowing each player GObj to read moveset data. This structure starts at offset 0x3E4 of the player data table.

A little known fact however is that players actually have 4 of these structures. The other 3 are used by the color event system -- and have been extended to create a new structure format that I think is called a "color register" -- or a "color ratio register". They are each a whopping 0x80 bytes in length, compared to the original 0x24 of the generic control structure:

Code:
Color register:
0x00  W  Event Timer (int)
0x04  ?  (unused?)
0x08  P  Pointer to Next Event Op
0x0C  W  Memory Count
0x10  W  Control Memory 0
0x14  W  Control Memory 1
0x18  W  Control Memory 2
0x1C  W  Control Memory 3
0x20  W  Control Memory 4
0x24  ?  ?
0x28  ?  ?
0x2C  W  RGBA
0x30  F  R
0x34  F  G
0x38  F  B
0x3C  F  A
0x40  F  add R
0x44  F  add G
0x48  F  add B
0x4C  F  add A
0x50  W  light RGBA
0x54  F  light R
0x58  F  light G
0x5C  F  light B
0x60  F  light A
0x64  F  light add R
0x68  F  light add G
0x6C  F  light add B
0x70  F  light add A
0x74  F  light X position
0x78  F  light Y position
0x7C  B  flags 
# (80) = color overlay display toggle
# (40) = light display toggle
For as long as I’ve been hacking Melee, the community seems to have known about most of these color variables as utilities for creating Flash <color> on <action> style codes. I don’t however think that anyone has documented the fact that these variables are actually part of an extended control structure for parsing event data. What the SSBM Data sheet calls the “blend pointer” is actually an event pointer, like the one used for moveset data.

Each color register can be accessed from the following player data offsets:

Code:
0x408 = Inflicted color register
0x488 = Self color register
0x508 = Auxiliary color register?
The “add” variables in each of these structures will add their float value to the corresponding channel each frame. These are used to create the blended transitions over time that can be created with the default color events. Channel overflows (> 255.0) go back to zero, which allows them to be used for “blinking” animations as well. Negative blend values will subtract instead of add. Setting them to 0 will keep a channel from changing over time within the scope of a single action.

Creative use of these variables with Achilles' custom player data subaction event could result in some very interesting effects. On that note, custom color events might allow for an exploit that lets us run separate, specialized player data events (even custom ones) in parallel by further extending the player-color events to create additional doppelgangers. In fact, it seems like it would be a fairly simple matter to invent entirely new event systems from scratch, using the game's methods as a template. I think these revelations will have interesting implications for the future of custom event syntaxes.

Itaru Itaru UnclePunch UnclePunch SinsOfApathy SinsOfApathy DRGN DRGN Achilles1515 Achilles1515
 
Last edited:

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
257
Location
Venezuela
What would be the command needed to make Ganon's sword appear? I know it's 7C but what's Ganon's sword mod ID?
 

Stormghetti

Smash Journeyman
Joined
Aug 23, 2015
Messages
381
Location
Spain
NNID
Stormghetti
What would be the command needed to make Ganon's sword appear? I know it's 7C but what's Ganon's sword mod ID?
If you haven't figured it out already, it's 7C 08 00 00. To remove it at any frame, you need another model mod command with 7C 08 FF FF as the value.
 
Last edited:

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
257
Location
Venezuela
Pretty sure you only can assign hitboxes to the hand, and then you need to offset it on the Y axis i think.

To find out which bone is which you can use Smash Forge.
 

dude30500

Smash Rookie
Joined
May 7, 2015
Messages
20
[38] - Player Event - ?_Hitbox_unkflags_0x42_05 (sets either 04 or 01 flag)
- hitboxes allocated inside of a player entity during the game have a set of flags at offset 0x40.
1 word:
03FFFFFC = hitbox ID
00000003 = Flag modifications
- Flag modifications are actually 2 bools, but one is prioritized over the other--causing them to act like a 2-bit ID:
0 = set hitbox flag 0x42_01 to 0
1 = set hitbox flag 0x42_01 to 1
2 = set hitbox flag 0x42_04 to 0
3 = set hitbox flag 0x42_04 to 1
- Effect of flags are unknown. Can be observed in action state change from Yoshi egg roll air -> ground
This affects the Hitboxes ability to interact with other players/items. Bit 0x00000001 determines whether to enable/disable, Bit 0x00000002 determines if its a player/item interaction change.
 
Top