Well, I think you were on the right track, because those body states appear to originate from subaction event data.
Somewhere in the cliffcatch wait animation interrupt function, there seems to be a hardcoded toggling of the body state that’s used to count down the intangibility timer. It simply toggles the state, meaning that if you remove the subaction event trigger, then it will toggle intangibility ON after the timer is up; rather than off.
---
Here are a pair of overwrites that disables the reading of subaction events for the cliffcatch state transition, and disables the hardcoded toggle. It effectively eliminates the intangibility caused by catching a ledge:
Code:
-==-
Vulnerable Ledge Grab
Removes intangibility caused by catching a ledge
[Punkline]
1.02 --- 800813e0 ----- 38a00000 -> 38A04000
# disable subaction event reading on action state change for cliffcatch
1.02 --- 8009a8b0 ----- 4bfe0eb1 -> 60000000
# stop toggling of body state on cliff wait
---
To handle the knockback scaling, I’ve created the
Defensive Knockback Modifiers code.
The following code includes the above overwrites, the Defensive Knockback Modifiers code, and some default modifiers that scale the knockback of cliffcatch and cliffwait states to 50% applied force:
Code:
-==-
Scalable Ledge Vulnerability
Removes intangibility caused by catching a ledge, and scales the knockback applied while being struck from a ledge
[Punkline]
<Defensive_Knockback_Modifiers>
4E800021
# place an arbitrary number of character:action state IDs below these comments:
# FF------ = Internal Character ID
# --FFF--- = Action State ID
# -----FFF = fixed point: 0xF.FF
FF0FC080
FF0FD080
# <- place new modifiers here
# terminator:
00000000
1.02 --- 8008d940 ----- 7c7f1b78 -> branch
7C7F1B78 C03F1850 7D57E2A6 3C800805 7C97E3A6
bl <Defensive_Knockback_Modifiers>
7CA802A6 80C50000 38A50004 2C060000 41820044 54C7463E 813F0004 2C8700FF 7C093800 4C422342 4082FFDC 54C7A53E 813F0010 7C093800 4082FFCC 54C7053E B0E1FFF0 E0017FF0 EC010032 D01F1850 7D57E3A6 00000000
1.02 --- 800813e0 ----- 38a00000 -> 38A04000
1.02 --- 8009a8b0 ----- 4bfe0eb1 -> 60000000
---
The above code uses 2 knockback modifiers that can be edited to change the scaled knockback:
FF0FC080
FF0FD080
In each of these, the trailing
0x080 represents the decimal number 128/256 -- or
50%
By changing this number, you can
change the applied knockback scale.
See
here for more details, and let me know if you have any questions.