Just a tip for Joystick support: Right now the character crouches whenever the stick is pointing even SLIGHTLY down. This is actually a mistake, cause whenever the player wants to go right or left, the stick will always be pointing either slightly upwards or downwards (humans can't align the stick at exactly 0 or 180 degrees every time). You want crouch detection to be as close to directly down as possible, cause it's typically much less annoying for the player to input down then slightly adjust for left/right.
Good demo! The mechanics are really neat :)