• 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!

In Progress Frame Data Visualization Improvement v0.21

rmn

Smash Rookie
Joined
Feb 15, 2016
Messages
15
Location
Alabama
Modifies the existing hitbox visualization in SSBM's Develop mode as follows:
  • Hitboxes display knockback angle
  • Hitboxes are always drawn on top of hurtboxes
  • Hurtboxes are always drawn on top of character models and sword trails
  • Hurtboxes change color to indicate IASA and autocancel windows

Codeset for these examples includes this code as well as:
  • Disable All In-Game GFX and Textures [Achilles]
  • Lagless FoD [Dan Salvato]
  • Hitbox displays do not interpolate [Magus]

Future plans:
  • Fix bugs
  • Possibly change Sakurai angle indicator to a star/asterisk
  • Clean up code and reduce length
  • Research displaying hitboxes on top of particle effects (currently to record clear animations, disabling particle effects is sometimes necessary)
  • Use higher transparency for hitbox interpolation region? (moves like Marth nair are cluttered, hard to follow as is)
Known bugs (should be fixed soon):
  • Breaks hitboxes-but-no-character-models display mode
  • Grab boxes display as if they have the Sakurai angle

Options:
The right half of the first 7 lines are as follows:
  1. Hitbox color (all colors in RGBA format)
  2. Angle indicator color
  3. Display reverse angle for hitboxes behind character? If 1, hitboxes behind your character will be flipped. If 0, they won't.
  4. Normal hurtbox color
  5. Hurtbox color during aerial attack landing lag window
  6. Hurtbox color during aerial autocancel window
  7. Hurtbox color during attack IASA window

Code:
$Frame Data Visualization Improvement v0.21 [rmn]
04080604 ff0000aa
04080608 ffffffdd
0408061c 00000001
04080620 ffff00aa
04080624 ffff00aa
04080628 ff8000aa
0408062c ff00ffaa
04008e58 38800007
04080a98 60000000
04080600 48000038
C2080C0C 00000005
3C00800C 60002600
7C0803A6 4E800021
3C008008 600005E8
7C0803A6 387B0000
4E800020 00000000
C2080A2C 00000003
3C008008 60000C10
7C0803A6 4E800020
60000000 00000000
C20805E4 00000005
8063002C 3BE30000
3B250000 3BB90000
887F221E 3C008008
60000A30 7C0803A6
4E800020 00000000
C20805E8 00000010
8083002C 3CA0804D
60A536AC 3CC08008
60C60620 80040010
2C00002C 41800050
2C000045 41810048
88042218 2C000080
4180000C 8006000C
48000038 80040010
2C000041 41800028
2C000045 41810020
80042200 2C000000
4182000C 80060004
48000010 80060008
48000008 80060000
90050000 3BC00000
60000000 00000000
C20807D8 0000000B
3B200000 1C190138
7F5F0214 C03F0038
389C0000 80BB002C
C045002C C06500B0
387A0914 3C008000
60009F54 7C0803A6
4E800021 2C030000
41820008 3BC00001
3B390001 28190004
3B5A0138 4180FFC0
881F221B 00000000
04080600 48000038
0408060c 00000000
04080610 3F490FDB
04080614 3F000000
04080618 00000000
C2009F60 00000002
D0410024 D0610028
80030000 00000000
C2009FE4 00000003
9421FFD0 90610038
90A1003C D0210040
80C3004C 00000000
C200A028 0000003F
80610038 80A1003C
C0210040 80C3004C
80030050 90C10014
90010018 80030054
9001001C 81230020
3C608008 60630618
92830000 3A800000
28090169 40820048
3A800001 28140000
41820024 3C608008
6063060C C0430000
3C608008 60630614
C0030000 EC210032
48000040 3A800000
3C608008 60630610
C0430000 C0210040
48000028 3C004330
9001FFF8 C8028B00
6D298000 9121FFFC
C841FFF8 EC420028
C0028AF0 EC420032
3C003F70 9001FFF8
C001FFF8 EC210032
D0410044 D0210048
FC201090 3C008032
600063D4 7C0803A6
4E800021 D021004C
C0210044 3C008032
60006240 7C0803A6
4E800021 D0210050
C0410048 80610038
80030054 90010028
EC220072 C082F060
3C608008 6063061C
80030000 80610038
C0610054 C003004C
C0A10058 FC832040
28000000 40820008
EC840132 40860010
FC802840 40850014
EC210132 FC802840
40840008 EC210132
EC2100F2 EC00082A
D0010020 C021004C
EC220072 C0030050
EC00082A D0010024
38ED8000 3C608008
60630608 80030000
90070000 C0210048
3D203D80 3809999A
9001FFF8 C001FFF8
EC210032 38610020
38810014 80A1003C
38CD8008 3C008000
60008FC8 7C0803A6
4E800021 28140001
4182FEAC 38210030
3C608008 60630618
82830000 3C608008
60630604 80030000
38ED8000 90070000
38600001 38600001
60000000 00000000
Edit: Changed 2 lines of code to fix a bug with sword trails.
 
Last edited:

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
Dude! This looks so insanely cool. Those hitbox angles are something I've always wanted in this game. All of these features are excellent!

I’m having some trouble testing your code though. The injection seems to mess up whenever a hitbox comes out.

---

Also, I wanted to suggest something.

Writing data to a static location in RAM can cause nasty incompatibilities with other codes.

For example, I have an experimental code I wrote a couple months ago that filters the display of hit, hurt, invuln, intan, reflect, and shield bubbles individually by type using a new set of separate collision bubble flags. It also includes flags for ECB display, and disabling GFX particles.

With the way you’ve statically overwritten parts of the player display state function--this other code would incompatible with yours (along with many other codes that would attempt to play with collision bubbles)

However, if you include something like this in your injection code--
Code:
b codeStart

getData:
blrl
.long 0xFF0000AA # drop arbitrary amount of data here
.long 0xFFFFFFDD
.long 0x00000001
.long 0xFFFF00AA
.long 0xFFFF00AA
.long 0xFF8000AA
.long 0xFF00FFAA

codeStart:
bl getData
mflr r5 # r5 now holds address of above data table

# the rest of the injection code would go here
--then you don't have to worry about sharing static space with other codes. The only cause for concern at that point is the injection hook locations.

This is a lot easier to do with MCM, but if you provide a manual offset for the bl to the "getData" label, then you can reach it from multiple injections so long as they are submitted as a single gecko code.

Doing this will help keep your code from getting grumpy with other codes.
 
Last edited:

rmn

Smash Rookie
Joined
Feb 15, 2016
Messages
15
Location
Alabama
I wasn't able to reproduce your bug (Dolphin 4.0-9371, no other codes enabled). Not sure what's causing it.

That data table sounds like a really good idea! I'll have to use that method when I rewrite this and clean it up. This was my first actual ASM project and I didn't originally intend to release it but I decided I didn't have time to go through and capture all the animations for the characters myself. Needless to say, it's pretty messy. The hack-job way I got hitboxes and hurtboxes to overlay on top of character models was to relocate code in the player display state function, which normally handles hitboxes, then hurtboxes and lots of other debug stuff, and finally character models and then sword trails (you know more about player display state stuff than I do). I basically moved the block of code that does character models to the top, moved hitboxes and hurtboxes to the end, then changed the z-buffer behavior so they always draw on top even if they go under, say, Marth's cape. The result is that the character display state function is sort of butchered right now. The spots I'm using to store some data are lines that get skipped over in this process and so won't ever be read as code. Yuck. The first thing on my to-do-list is to do this more cleanly. I don't know yet how to relocate those pieces of code while preserving people's code injections there.
 

Punkline

Dr. Frankenstack
Joined
May 15, 2015
Messages
423
Edit - Clarified a few things

Damn, this is your first big ASM project? What you’ve made here is really impressive and I’m looking forward to more of your stuff. It’s a miracle that any of my first projects worked in the first place--let alone with other codes.

wasn't able to reproduce your bug (Dolphin 4.0-9371, no other codes enabled). Not sure what's causing it.
On several occasions, I’ve found that interrupt-based issues are more accurately emulated on Dolphin 5+. You might be able to reproduce the bug by updating Dolphin (or alternatively by testing on your console.)

Edit - Just confirmed that this bug doesn't show up in 4.0 Dolphin.

---

I’ve looked very closely at the player display state function, but there are still parts of it I haven’t worked out. I’ve only really looked at the logic for calling the draw functions of most of the stuff in there; when it comes to actually drawing the primitives though I've only looked into most of the trianglestrip related calls, like sword trails and the item range display.

If you place a breakpoint in the display function, you’ll notice that it runs 3 times per player entity each frame.

My experience with collision bubbles only goes down to the loop logic in that display state function. I still have to go through your code to see how it works, but if you're saying that you've changed the order of their draw operations to change the z layer, then you might be able to use a parameter that the function has saved in r28

I've seen it used in the sword trail draw function like this:



---

Achilles1515 Achilles1515 rmn rmn

The "set Z mode" GX step can be modified for interesting results in the item range display state. My experiments with the arguments showed me 2 interesting variations of the default r4 value of 03.

FF - (sign extended -1?) seems to cause the z order to be ignored, drawing the primitive on top.
44 - causes the z mask to become inverted. I think it's possible to make interesting silhouette shapes this way



I don’t know if this only applies to trianglestrips or not, but perhaps you can control the bubble draw function(s?) by including this step.
 
Last edited:

rmn

Smash Rookie
Joined
Feb 15, 2016
Messages
15
Location
Alabama
The loop counter is great info. I'll look into using that as a basis for making the next iteration of this code a lot more compatible.

I think GXSetZMode might use the same constants as this for argument 2. (The bits of sysdolphin source from Killer7 use the same GX_ constants.) 7 definitely works for "always draw the new pixel regardless of z value." It may be doing something like discarding all but the last few bits? That would have 44 read as 4 -- Greater, reversing the Z-order -- and I wouldn't be too surprised if the last comparison was >=7 which would have FF read as Always, ignoring the Z-order. I'm just speculating now though; I haven't done any testing beyond confirming that I could use the "Always" mode.

But yeah, I originally tried only changing the GXSetZMode call and it worked to cover up the character model but got covered up by swordtrails. That's when I went to more drastic measures and chopped up the display state code. I think what you just told me about the loop counter may be exactly what I need, hopefully. Thank you!
 
Last edited:

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,178
Location
Sacramento, CA
This is awesome, rmn rmn ! And it looks perfect for an old project I had that I've been needing to reopen.
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Achilles1515 Achilles1515 rmn rmn

The "set Z mode" GX step can be modified for interesting results in the item range display state. My experiments with the arguments showed me 2 interesting variations of the default r4 value of 03.

FF - (sign extended -1?) seems to cause the z order to be ignored, drawing the primitive on top.
44 - causes the z mask to become inverted. I think it's possible to make interesting silhouette shapes this way



I don’t know if this only applies to trianglestrips or not, but perhaps you can control the bubble draw function(s?) by including this step.
Not sure if you've already seen the official documentation for this function or not - but you can just google the function name and look at the US patent, lol.
Code:
/********************************/

typedef u8 GXBool;

#define GX_TRUE ((GXBool)1)
#define GX_FALSE ((GXBool)0)
#define GX_ENABLE ((GXBool)1)
#define GX_DISABLE ((GXBool)0)


/********************************/

typedef enum _GXCompare
{
GX_NEVER,
GX_LESS,
GX_EQUAL,
GX_LEQUAL,
GX_GREATER,
GX_NEQUAL,
GX_GEQUAL,
GX_ALWAYS

} GXCompare;

/********************************/

/* Function Prototype */
void GXSetZMode (
    GXBool    compare_enable,    /* r3 */
    GXCompare    func,    /* r4 */
    GXBool    update_enable );     /* r5 */
rmn rmn
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,178
Location
Sacramento, CA
For those that might be interested, I converted this to a standard (non-Gecko) DOL mod for MCM (warning, not yet tested!):

Code:
-==-


Frame Data Visualization Improvement v0.21
https://smashboards.com/threads/frame-data-visualization-improvement-v0-21.447094/
[rmn]
Version -- DOL Offset ------ Hex to Replace ---------- ASM Code
1.02 ----- 0x80080604 --- 1C190138 -> ff0000aa # Hitbox color (all colors as RGBA)
---------- 0x80080608 --- 7F5F0214 -> ffffffdd # Angle indicator color
---------- 0x8008061c ---

2C030000 41820008
3BC00001 3B390001
28190004

->

00000001 # Reverse hitboxe angle behind character? If 1, hitboxes behind character will be flipped.
ffff00aa # Normal hurtbox color
ffff00aa # Hurtbox color during aerial attack landing lag window
ff8000aa # Hurtbox color during aerial autocancel window
ff00ffaa # Hurtbox color during attack IASA window

---------- 0x80008e58 --- 38800003 -> 38800007
---------- 0x80080a98 --- 4BFF4631 -> 60000000
---------- 0x80080600 --- 3B200000 -> 48000038
---------- 0x80080C0C --- 480419F5 -> Branch

3C00800C 60002600
7C0803A6 4E800021
3C008008 600005E8
7C0803A6 387B0000
4E800020 00000000

---------- 0x80080A2C --- 887F221E -> Branch

3C008008 60000C10
7C0803A6 4E800020
60000000 00000000

---------- 0x800805E4 --- 3BA50000 -> Branch

8063002C 3BE30000
3B250000 3BB90000
887F221E 3C008008
60000A30 7C0803A6
4E800020 00000000

---------- 0x800805E8 --- 3BC00000 -> Branch

8083002C 3CA0804D
60A536AC 3CC08008
60C60620 80040010
2C00002C 41800050
2C000045 41810048
88042218 2C000080
4180000C 8006000C
48000038 80040010
2C000041 41800028
2C000045 41810020
80042200 2C000000
4182000C 80060004
48000010 80060008
48000008 80060000
90050000 3BC00000
60000000 00000000

---------- 0x800807D8 --- 881F221B -> Branch

3B200000 1C190138
7F5F0214 C03F0038
389C0000 80BB002C
C045002C C06500B0
387A0914 3C008000
60009F54 7C0803A6
4E800021 2C030000
41820008 3BC00001
3B390001 28190004
3B5A0138 4180FFC0
881F221B 00000000

---------- 0x80080600 --- 3B200000 -> 48000038
---------- 0x8008060c --- C03F0038 -> 00000000
---------- 0x80080610 ---

389C0000 387A0914
4BF8993D

->

3F490FDB 3F000000
00000000

---------- 0x80009F60 --- 80030000 -> Branch

D0410024 D0610028
80030000 00000000

---------- 0x80009FE4 --- 80C3004C -> Branch

9421FFD0 90610038
90A1003C D0210040
80C3004C 00000000

---------- 0x8000A028 --- 38600001 -> Branch

80610038 80A1003C
C0210040 80C3004C
80030050 90C10014
90010018 80030054
9001001C 81230020
3C608008 60630618
92830000 3A800000
28090169 40820048
3A800001 28140000
41820024 3C608008
6063060C C0430000
3C608008 60630614
C0030000 EC210032
48000040 3A800000
3C608008 60630610
C0430000 C0210040
48000028 3C004330
9001FFF8 C8028B00
6D298000 9121FFFC
C841FFF8 EC420028
C0028AF0 EC420032
3C003F70 9001FFF8
C001FFF8 EC210032
D0410044 D0210048
FC201090 3C008032
600063D4 7C0803A6
4E800021 D021004C
C0210044 3C008032
60006240 7C0803A6
4E800021 D0210050
C0410048 80610038
80030054 90010028
EC220072 C082F060
3C608008 6063061C
80030000 80610038
C0610054 C003004C
C0A10058 FC832040
28000000 40820008
EC840132 40860010
FC802840 40850014
EC210132 FC802840
40840008 EC210132
EC2100F2 EC00082A
D0010020 C021004C
EC220072 C0030050
EC00082A D0010024
38ED8000 3C608008
60630608 80030000
90070000 C0210048
3D203D80 3809999A
9001FFF8 C001FFF8
EC210032 38610020
38810014 80A1003C
38CD8008 3C008000
60008FC8 7C0803A6
4E800021 28140001
4182FEAC 38210030
3C608008 60630618
82830000 3C608008
60630604 80030000
38ED8000 90070000
38600001 38600001
60000000 00000000[
/code][/spoiler]
 
Last edited:

NeilHarbin0

Smash Rookie
Joined
Feb 16, 2010
Messages
7
Slippi.gg
NEIL#0
UnclePunch helped me out by making a code to reverse hitbox draw order. This makes it so that the highest priority hitboxes are drawn last instead of first, which helps with visualization. I merged that code into this one, and below is the modified version. I recommend using it in conjunction with a hitbox colorization code, One I modified the colors of to be more clear is also below.

Example of what these codes together look like:


Modified Visualization Code:
Code:
$Frame Data Visualization Improvement v0.22 [rmn,UnclePunch,NeilHarbin0]
*Modified by NeilHarbin0 to add hitbox ID render order reversal from UnclePunch
04080604 ff0000aa
04080608 ffffffdd
0408061c 00000001
04080620 ffff00aa
04080624 ffff00aa
04080628 ff8000aa
0408062c ff00ffaa
04008e58 38800007
04080a98 60000000
04080600 48000038
C2080C0C 00000005
3C00800C 60002600
7C0803A6 4E800021
3C008008 600005E8
7C0803A6 387B0000
4E800020 00000000
C2080A2C 00000003
3C008008 60000C10
7C0803A6 4E800020
60000000 00000000
C20805E4 00000005
8063002C 3BE30000
3B250000 3BB90000
887F221E 3C008008
60000A30 7C0803A6
4E800020 00000000
C20805E8 00000010
8083002C 3CA0804D
60A536AC 3CC08008
60C60620 80040010
2C00002C 41800050
2C000045 41810048
88042218 2C000080
4180000C 8006000C
48000038 80040010
2C000041 41800028
2C000045 41810020
80042200 2C000000
4182000C 80060004
48000010 80060008
48000008 80060000
90050000 3BC00000
60000000 00000000
C20807D8 0000000B
3B200003 1C190138
7F5F0214 C03F0038
389C0000 80BB002C
C045002C C06500B0
387A0914 3C008000
60009F54 7C0803A6
4E800021 2C030000
41820008 3BC00001
3B39FFFF 2C190000
3B5AFEC8 4080FFC0
881F221B 00000000
04080600 48000038
0408060c 00000000
04080610 3F490FDB
04080614 3F000000
04080618 00000000
C2009F60 00000002
D0410024 D0610028
80030000 00000000
C2009FE4 00000003
9421FFD0 90610038
90A1003C D0210040
80C3004C 00000000
C200A028 0000003F
80610038 80A1003C
C0210040 80C3004C
80030050 90C10014
90010018 80030054
9001001C 81230020
3C608008 60630618
92830000 3A800000
28090169 40820048
3A800001 28140000
41820024 3C608008
6063060C C0430000
3C608008 60630614
C0030000 EC210032
48000040 3A800000
3C608008 60630610
C0430000 C0210040
48000028 3C004330
9001FFF8 C8028B00
6D298000 9121FFFC
C841FFF8 EC420028
C0028AF0 EC420032
3C003F70 9001FFF8
C001FFF8 EC210032
D0410044 D0210048
FC201090 3C008032
600063D4 7C0803A6
4E800021 D021004C
C0210044 3C008032
60006240 7C0803A6
4E800021 D0210050
C0410048 80610038
80030054 90010028
EC220072 C082F060
3C608008 6063061C
80030000 80610038
C0610054 C003004C
C0A10058 FC832040
28000000 40820008
EC840132 40860010
FC802840 40850014
EC210132 FC802840
40840008 EC210132
EC2100F2 EC00082A
D0010020 C021004C
EC220072 C0030050
EC00082A D0010024
38ED8000 3C608008
60630608 80030000
90070000 C0210048
3D203D80 3809999A
9001FFF8 C001FFF8
EC210032 38610020
38810014 80A1003C
38CD8008 3C008000
60008FC8 7C0803A6
4E800021 28140001
4182FEAC 38210030
3C608008 60630618
82830000 3C608008
60630604 80030000
38ED8000 90070000
38600001 38600001
60000000 00000000
Hitbox Color Code, Modified from here.
Code:
$Colored Hitbox IDs [UnclePunch,NeilHarbin0]
*ID 0 = Red, ID 1 = Green, ID 2 = Blue, ID 3 = Purple
C2009FA4 00000007
4800001D 7CA802A6
1CD90004 7CC5302E
38AD8000 90C50000
48000018 4E800021
FF313180 7CFC0080
00FFFF80 9600FF80
60000000 00000000
 
Last edited:

ItsYaBoii

Smash Rookie
Joined
May 4, 2020
Messages
11
Would anyone be kind enough to show me what code I need to get these features only?
Hitboxes are always drawn on top of hurtboxes
Hurtboxes are always drawn on top of character models and sword trails
Hurtboxes change color to indicate IASA and autocancel windows
edit: nevermind I just figured out how to change transparency on the rgba hex.
 
Last edited:

JazzerThighs

Smash Rookie
Joined
Jul 28, 2022
Messages
2
UnclePunch helped me out by making a code to reverse hitbox draw order. This makes it so that the highest priority hitboxes are drawn last instead of first, which helps with visualization. I merged that code into this one, and below is the modified version. I recommend using it in conjunction with a hitbox colorization code, One I modified the colors of to be more clear is also below.

Example of what these codes together look like:


Modified Visualization Code:
Code:
$Frame Data Visualization Improvement v0.22 [rmn,UnclePunch,NeilHarbin0]
*Modified by NeilHarbin0 to add hitbox ID render order reversal from UnclePunch
04080604 ff0000aa
04080608 ffffffdd
0408061c 00000001
04080620 ffff00aa
04080624 ffff00aa
04080628 ff8000aa
0408062c ff00ffaa
04008e58 38800007
04080a98 60000000
04080600 48000038
C2080C0C 00000005
3C00800C 60002600
7C0803A6 4E800021
3C008008 600005E8
7C0803A6 387B0000
4E800020 00000000
C2080A2C 00000003
3C008008 60000C10
7C0803A6 4E800020
60000000 00000000
C20805E4 00000005
8063002C 3BE30000
3B250000 3BB90000
887F221E 3C008008
60000A30 7C0803A6
4E800020 00000000
C20805E8 00000010
8083002C 3CA0804D
60A536AC 3CC08008
60C60620 80040010
2C00002C 41800050
2C000045 41810048
88042218 2C000080
4180000C 8006000C
48000038 80040010
2C000041 41800028
2C000045 41810020
80042200 2C000000
4182000C 80060004
48000010 80060008
48000008 80060000
90050000 3BC00000
60000000 00000000
C20807D8 0000000B
3B200003 1C190138
7F5F0214 C03F0038
389C0000 80BB002C
C045002C C06500B0
387A0914 3C008000
60009F54 7C0803A6
4E800021 2C030000
41820008 3BC00001
3B39FFFF 2C190000
3B5AFEC8 4080FFC0
881F221B 00000000
04080600 48000038
0408060c 00000000
04080610 3F490FDB
04080614 3F000000
04080618 00000000
C2009F60 00000002
D0410024 D0610028
80030000 00000000
C2009FE4 00000003
9421FFD0 90610038
90A1003C D0210040
80C3004C 00000000
C200A028 0000003F
80610038 80A1003C
C0210040 80C3004C
80030050 90C10014
90010018 80030054
9001001C 81230020
3C608008 60630618
92830000 3A800000
28090169 40820048
3A800001 28140000
41820024 3C608008
6063060C C0430000
3C608008 60630614
C0030000 EC210032
48000040 3A800000
3C608008 60630610
C0430000 C0210040
48000028 3C004330
9001FFF8 C8028B00
6D298000 9121FFFC
C841FFF8 EC420028
C0028AF0 EC420032
3C003F70 9001FFF8
C001FFF8 EC210032
D0410044 D0210048
FC201090 3C008032
600063D4 7C0803A6
4E800021 D021004C
C0210044 3C008032
60006240 7C0803A6
4E800021 D0210050
C0410048 80610038
80030054 90010028
EC220072 C082F060
3C608008 6063061C
80030000 80610038
C0610054 C003004C
C0A10058 FC832040
28000000 40820008
EC840132 40860010
FC802840 40850014
EC210132 FC802840
40840008 EC210132
EC2100F2 EC00082A
D0010020 C021004C
EC220072 C0030050
EC00082A D0010024
38ED8000 3C608008
60630608 80030000
90070000 C0210048
3D203D80 3809999A
9001FFF8 C001FFF8
EC210032 38610020
38810014 80A1003C
38CD8008 3C008000
60008FC8 7C0803A6
4E800021 28140001
4182FEAC 38210030
3C608008 60630618
82830000 3C608008
60630604 80030000
38ED8000 90070000
38600001 38600001
60000000 00000000
Hitbox Color Code, Modified from here.
Code:
$Colored Hitbox IDs [UnclePunch,NeilHarbin0]
*ID 0 = Red, ID 1 = Green, ID 2 = Blue, ID 3 = Purple
C2009FA4 00000007
4800001D 7CA802A6
1CD90004 7CC5302E
38AD8000 90C50000
48000018 4E800021
FF313180 7CFC0080
00FFFF80 9600FF80
60000000 00000000
Hey, Great Work with this stuff! I'm trying to make some new GIFs for the new SuperCombo.gg wiki for Melee, and at this point I have all of the codes I need standalone or included in 20XX v5

All I need out of this pack that I don't have standalone is the HitboxesDisplayKnockbackAngle feature. Can you show me how I can JUST have that in a Gecko Code?

Thanks a bunch!
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,178
Location
Sacramento, CA
Hey, Great Work with this stuff! I'm trying to make some new GIFs for the new SuperCombo.gg wiki for Melee, and at this point I have all of the codes I need standalone or included in 20XX v5

All I need out of this pack that I don't have standalone is the HitboxesDisplayKnockbackAngle feature. Can you show me how I can JUST have that in a Gecko Code?

Thanks a bunch!
Once you know how to identify the distinct parts of a code, you should be able to pick out specific aspects that you want. Sometimes some parts require that other parts are also included to function, however. I don't know if the part you're looking for in this code depends on another part within it, but I can at least show you how to identify the parts so you can try some testing to find the part you're after.

This code is composed of multiple distinct parts, each of which can be categorized as a static overwrite or an injection code.
Static Overwrites simply replace some code with some new code, directly in place in the DOL. These are used when the new code is the same length or less than the original code. Injection Codes are used when the new code is longer than the original code, and store the custom code elsewhere, branch to it during execution, and then branch back when the custom code is done.

The easiest way to see all of these within a code is probably to load it in MCM. For example:
1659405498455.png


You could try running the code with just some parts included to see if you can isolate the part for the knockback angle line.

To get a Gecko code into MCM, just click on the Mod Construction tab at the top, then "Add New Mod to Library", and "Import Gecko Code."

Alternatively, it's usually not too hard to find these parts within a Gecko code. In this code, and almost all Gecko codes written nowadays, all of the static overwrites are lines that start with 04, and injection codes start with C2. The 04 lines are just the one line, but the C2 parts span multiple lines. At the end of the C2 line is a number indicating how many lines that C2 code covers. Here are the individual parts highlighted, so you can try picking out specific ones:
$Frame Data Visualization Improvement v0.22 [rmn,UnclePunch,NeilHarbin0]
*Modified by NeilHarbin0 to add hitbox ID render order reversal from UnclePunch
04080604 ff0000aa
04080608 ffffffdd
0408061c 00000001
04080620 ffff00aa
04080624 ffff00aa
04080628 ff8000aa
0408062c ff00ffaa
04008e58 38800007
04080a98 60000000
04080600 48000038
C2080C0C 00000005
3C00800C 60002600
7C0803A6 4E800021
3C008008 600005E8
7C0803A6 387B0000
4E800020 00000000
C2080A2C 00000003
3C008008 60000C10
7C0803A6 4E800020
60000000 00000000
C20805E4 00000005
8063002C 3BE30000
3B250000 3BB90000
887F221E 3C008008
60000A30 7C0803A6
4E800020 00000000
C20805E8 00000010
8083002C 3CA0804D
60A536AC 3CC08008
60C60620 80040010
2C00002C 41800050
2C000045 41810048
88042218 2C000080
4180000C 8006000C
48000038 80040010
2C000041 41800028
2C000045 41810020
80042200 2C000000
4182000C 80060004
48000010 80060008
48000008 80060000
90050000 3BC00000
60000000 00000000
C20807D8 0000000B
3B200003 1C190138
7F5F0214 C03F0038
389C0000 80BB002C
C045002C C06500B0
387A0914 3C008000
60009F54 7C0803A6
4E800021 2C030000
41820008 3BC00001
3B39FFFF 2C190000
3B5AFEC8 4080FFC0
881F221B 00000000
04080600 48000038
0408060c 00000000
04080610 3F490FDB
04080614 3F000000
04080618 00000000
C2009F60 00000002
D0410024 D0610028
80030000 00000000
C2009FE4 00000003
9421FFD0 90610038
90A1003C D0210040
80C3004C 00000000
C200A028 0000003F
80610038 80A1003C
C0210040 80C3004C
80030050 90C10014
90010018 80030054
9001001C 81230020
3C608008 60630618
92830000 3A800000
28090169 40820048
3A800001 28140000
41820024 3C608008
6063060C C0430000
3C608008 60630614
C0030000 EC210032
48000040 3A800000
3C608008 60630610
C0430000 C0210040
48000028 3C004330
9001FFF8 C8028B00
6D298000 9121FFFC
C841FFF8 EC420028
C0028AF0 EC420032
3C003F70 9001FFF8
C001FFF8 EC210032
D0410044 D0210048
FC201090 3C008032
600063D4 7C0803A6
4E800021 D021004C
C0210044 3C008032
60006240 7C0803A6
4E800021 D0210050
C0410048 80610038
80030054 90010028
EC220072 C082F060
3C608008 6063061C
80030000 80610038
C0610054 C003004C
C0A10058 FC832040
28000000 40820008
EC840132 40860010
FC802840 40850014
EC210132 FC802840
40840008 EC210132
EC2100F2 EC00082A
D0010020 C021004C
EC220072 C0030050
EC00082A D0010024
38ED8000 3C608008
60630608 80030000
90070000 C0210048
3D203D80 3809999A
9001FFF8 C001FFF8
EC210032 38610020
38810014 80A1003C
38CD8008 3C008000
60008FC8 7C0803A6
4E800021 28140001
4182FEAC 38210030
3C608008 60630618
82830000 3C608008
60630604 80030000
38ED8000 90070000
38600001 38600001
60000000 00000000

If I were you I would remove half of them, check to see if the knockback angle feature is still present, and then repeat until you've narrowed it down.
 

JazzerThighs

Smash Rookie
Joined
Jul 28, 2022
Messages
2
Once you know how to identify the distinct parts of a code, you should be able to pick out specific aspects that you want. Sometimes some parts require that other parts are also included to function, however. I don't know if the part you're looking for in this code depends on another part within it, but I can at least show you how to identify the parts so you can try some testing to find the part you're after.

This code is composed of multiple distinct parts, each of which can be categorized as a static overwrite or an injection code.
Static Overwrites simply replace some code with some new code, directly in place in the DOL. These are used when the new code is the same length or less than the original code. Injection Codes are used when the new code is longer than the original code, and store the custom code elsewhere, branch to it during execution, and then branch back when the custom code is done.

The easiest way to see all of these within a code is probably to load it in MCM. For example:
View attachment 357738

You could try running the code with just some parts included to see if you can isolate the part for the knockback angle line.

To get a Gecko code into MCM, just click on the Mod Construction tab at the top, then "Add New Mod to Library", and "Import Gecko Code."

Alternatively, it's usually not too hard to find these parts within a Gecko code. In this code, and almost all Gecko codes written nowadays, all of the static overwrites are lines that start with 04, and injection codes start with C2. The 04 lines are just the one line, but the C2 parts span multiple lines. At the end of the C2 line is a number indicating how many lines that C2 code covers. Here are the individual parts highlighted, so you can try picking out specific ones:
$Frame Data Visualization Improvement v0.22 [rmn,UnclePunch,NeilHarbin0]
*Modified by NeilHarbin0 to add hitbox ID render order reversal from UnclePunch
04080604 ff0000aa
04080608 ffffffdd
0408061c 00000001
04080620 ffff00aa
04080624 ffff00aa
04080628 ff8000aa
0408062c ff00ffaa
04008e58 38800007
04080a98 60000000
04080600 48000038
C2080C0C 00000005
3C00800C 60002600
7C0803A6 4E800021
3C008008 600005E8
7C0803A6 387B0000
4E800020 00000000
C2080A2C 00000003
3C008008 60000C10
7C0803A6 4E800020
60000000 00000000
C20805E4 00000005
8063002C 3BE30000
3B250000 3BB90000
887F221E 3C008008
60000A30 7C0803A6
4E800020 00000000
C20805E8 00000010
8083002C 3CA0804D
60A536AC 3CC08008
60C60620 80040010
2C00002C 41800050
2C000045 41810048
88042218 2C000080
4180000C 8006000C
48000038 80040010
2C000041 41800028
2C000045 41810020
80042200 2C000000
4182000C 80060004
48000010 80060008
48000008 80060000
90050000 3BC00000
60000000 00000000
C20807D8 0000000B
3B200003 1C190138
7F5F0214 C03F0038
389C0000 80BB002C
C045002C C06500B0
387A0914 3C008000
60009F54 7C0803A6
4E800021 2C030000
41820008 3BC00001
3B39FFFF 2C190000
3B5AFEC8 4080FFC0
881F221B 00000000
04080600 48000038
0408060c 00000000
04080610 3F490FDB
04080614 3F000000
04080618 00000000
C2009F60 00000002
D0410024 D0610028
80030000 00000000
C2009FE4 00000003
9421FFD0 90610038
90A1003C D0210040
80C3004C 00000000
C200A028 0000003F
80610038 80A1003C
C0210040 80C3004C
80030050 90C10014
90010018 80030054
9001001C 81230020
3C608008 60630618
92830000 3A800000
28090169 40820048
3A800001 28140000
41820024 3C608008
6063060C C0430000
3C608008 60630614
C0030000 EC210032
48000040 3A800000
3C608008 60630610
C0430000 C0210040
48000028 3C004330
9001FFF8 C8028B00
6D298000 9121FFFC
C841FFF8 EC420028
C0028AF0 EC420032
3C003F70 9001FFF8
C001FFF8 EC210032
D0410044 D0210048
FC201090 3C008032
600063D4 7C0803A6
4E800021 D021004C
C0210044 3C008032
60006240 7C0803A6
4E800021 D0210050
C0410048 80610038
80030054 90010028
EC220072 C082F060
3C608008 6063061C
80030000 80610038
C0610054 C003004C
C0A10058 FC832040
28000000 40820008
EC840132 40860010
FC802840 40850014
EC210132 FC802840
40840008 EC210132
EC2100F2 EC00082A
D0010020 C021004C
EC220072 C0030050
EC00082A D0010024
38ED8000 3C608008
60630608 80030000
90070000 C0210048
3D203D80 3809999A
9001FFF8 C001FFF8
EC210032 38610020
38810014 80A1003C
38CD8008 3C008000
60008FC8 7C0803A6
4E800021 28140001
4182FEAC 38210030
3C608008 60630618
82830000 3C608008
60630604 80030000
38ED8000 90070000
38600001 38600001
60000000 00000000

If I were you I would remove half of them, check to see if the knockback angle feature is still present, and then repeat until you've narrowed it down.
So I've been working today on this. I used the v.21 version, as it has one less feature to get rid of (that being the Hitbox ID Render Reversal that UnclePunch added)

I've gotten it down to this stripped down version of that code, provided here. I'm no coder, so I need someone to Bugfix this Gecko Code, or rewrite it I guess.

$Hitboxes Display Knockback Angle v0.1 [rmn, JazzerThighs]
*Stripped Down Version of the FDVP v.21 to only have this one feature
04080604 ff0000aa
04080608 ffffffdd
0408061c 00000001
C2080C0C 00000005
3C00800C 60002600
7C0803A6 4E800021
3C008008 600005E8
7C0803A6 387B0000
4E800020 00000000
C2080A2C 00000003
3C008008 60000C10
7C0803A6 4E800020
60000000 00000000
C20805E4 00000005
8063002C 3BE30000
3B250000 3BB90000
887F221E 3C008008
60000A30 7C0803A6
4E800020 00000000
C20807D8 0000000B
3B200000 1C190138
7F5F0214 C03F0038
389C0000 80BB002C
C045002C C06500B0
387A0914 3C008000
60009F54 7C0803A6
4E800021 2C030000
41820008 3BC00001
3B390001 28190004
3B5A0138 4180FFC0
881F221B 00000000
04080600 48000038
0408060c 00000000
04080610 3F490FDB
04080614 3F000000
04080618 00000000
C2009F60 00000002
D0410024 D0610028
80030000 00000000
C2009FE4 00000003
9421FFD0 90610038
90A1003C D0210040
80C3004C 00000000
C200A028 0000003F
80610038 80A1003C
C0210040 80C3004C
80030050 90C10014
90010018 80030054
9001001C 81230020
3C608008 60630618
92830000 3A800000
28090169 40820048
3A800001 28140000
41820024 3C608008
6063060C C0430000
3C608008 60630614
C0030000 EC210032
48000040 3A800000
3C608008 60630610
C0430000 C0210040
48000028 3C004330
9001FFF8 C8028B00
6D298000 9121FFFC
C841FFF8 EC420028
C0028AF0 EC420032
3C003F70 9001FFF8
C001FFF8 EC210032
D0410044 D0210048
FC201090 3C008032
600063D4 7C0803A6
4E800021 D021004C
C0210044 3C008032
60006240 7C0803A6
4E800021 D0210050
C0410048 80610038
80030054 90010028
EC220072 C082F060
3C608008 6063061C
80030000 80610038
C0610054 C003004C
C0A10058 FC832040
28000000 40820008
EC840132 40860010
FC802840 40850014
EC210132 FC802840
40840008 EC210132
EC2100F2 EC00082A
D0010020 C021004C
EC220072 C0030050
EC00082A D0010024
38ED8000 3C608008
60630608 80030000
90070000 C0210048
3D203D80 3809999A
9001FFF8 C001FFF8
EC210032 38610020
38810014 80A1003C
38CD8008 3C008000
60008FC8 7C0803A6
4E800021 28140001
4182FEAC 38210030
3C608008 60630618
82830000 3C608008
60630604 80030000
38ED8000 90070000
38600001 38600001
60000000 00000000

Bugs include:
-White 0 Degree Reference Line sometimes does not show up <-- Didnt realize that this phenomenon was actually showing moves with Sakurai Angles, which is like Most moves in the game lol
-Grabs show Sakurai Angle, could be changed to Astrisk
 
Last edited:

uncreativecow

Smash Rookie
Joined
Nov 14, 2022
Messages
3
I dont understand how to get this working; i put it in the gecko codes tab of dolphin (macOS), but nothing appears to be working. can anyone help me?
 
Top Bottom