Just a few things to keep in mind...
Theres already some confusion added to the code mostly with vars:
myOpponent
myGrabOpponent
the_Obj_Iam_Grabbing
You can see other examples of confusion i made...
OpponentSlam --> gets its value in the "grab state" it should be the entity has decribed above [KinematicBody:2058]
In the player "slam state" the function _bindGrabEntity... its using the var OpponentSlam
the main problem here... is that... ryo slam has a (roll) and then a (throw) this --> roll in the slam animation attack's the enemies has it goes by... has it attacks [KinematicBody:2058] becomes the entity its being attacked...and not the entity its being grabbed... its the case for the diferent extra var (OpponentSlam)
But it should very strait foward, its an easy process the code just gets bigger and looks confusing, has more stuff ( attacks, states, slams, grabAttacks ) are added...
One simple thing to keep in mind...

for playing sounds / projectiles / dusts...effects
use for example
if anim.frame== 3 && nextFrame == true
this way the projectile / sound will only play / spawn ONCE
Godot original animation system has signals for animationFinished() and frameChange().... but for it might keep the code scatered and more dificult to read... has it puts the code in a diferent function...
This is way is more strait foward ----> if (anim.frame== 3 && nextFrame == true ):