Basically the reason you're not seeing the animation is because the MC playhead is being sent to frame 4/5 on every enterFrame, so all you'll see is the first frame of the animation since it gets reset every time the code runs.
This is complicated, because the enterFrame has so many Key.isDown checks, but basically you need to set a boolean (true/false or 1/0) crouched and only run the gotoAndPlay(4/5) if NOT crouched already. Unfortunately as I said, you have so many keychecks already, I don't have time to fix it perfectly, but hopefully this'll help you in the right direction.
onClipEvent (load) {
var crouched=0;
var grav:Number = 0;
// gravity
var speed:Number = 10;
// how fast you walk
var jumpHeight:Number = 15;
// how high you jump
var slow:Number = .7;
// sets water falling speed
var slowspd:Number = speed/1.5;
// sets water walking speed
var setspeed:Number = speed;
var scale:Number = _xscale;
var ex:Number = 5;
// makes hitTests better, change for a closer hitTest (warning, more buggy if smalle, less real if further)
this.gotoAndStop(2);
}
onClipEvent (enterFrame) {
grav++;
_y += grav;
while (_root.ground.hitTest(_x, _y, true)) {
_y--;
grav = 0;
}
if (_root.water.hitTest(_x, _y, true)) {
if (grav>0) {
grav *= slow;
}
speed = slowspd;
} else {
speed = setspeed;
}
if (Key.isDown(Key.RIGHT)) {
_x += speed;
_xscale = scale;
if (_root.ground.hitTest(_x, _y+3, true)) {
this.gotoAndStop(1);
} else {
this.gotoAndStop(2);
}
} else if (Key.isDown(Key.LEFT)) {
_x -= speed;
_xscale = -scale;
if (_root.ground.hitTest(_x, _y+3, true)) {
this.gotoAndStop(1);
} else {
this.gotoAndStop(2);
}
} else {
if (!crouched && _root.ground.hitTest(_x, _y+3, true) && !Key.isDown(79) && !Key.isDown(73)) {
this.gotoAndStop(3);
}
}
if(Key.isDown(Key.DOWN)){
if (!crouched && !Key.isDown(Key.UP) && Key.isDown(Key.LEFT) && !Key.isDown(Key.RIGHT) && !Key.isDown(73)) {
this.gotoAndStop(5);
}
if (!crouched && !Key.isDown(Key.UP) && !Key.isDown(Key.LEFT) && Key.isDown(Key.RIGHT) && !Key.isDown(73)) {
this.gotoAndStop(5);
}
if (!crouched && !Key.isDown(Key.UP) && !Key.isDown(Key.LEFT) && !Key.isDown(Key.RIGHT) && !Key.isDown(79)) {
this.gotoAndStop(4);
}
crouched=1;
}else{
crouched=0;
}
if (!crouched && Key.isDown(Key.UP) && _root.ground.hitTest(_x, _y+3, true)) {
grav = -jumpHeight;
_y -= 4;
this.gotoAndStop(2);
}
if (_root.ground.hitTest(_x+(_width/2)+ex, _y-(_height/2), true) || _root.ground.hitTest(_x+(_width/2)+ex, _y-(_height/6), true) || _root.ground.hitTest(_x+(_width/2)+ex, _y-_height, true)) {
_x -= speed;
}
if (_root.ground.hitTest(_x-(_width/2)-ex, _y-(_height/2), true) || _root.ground.hitTest(_x-(_width/2)-ex, _y-(_height/6), true) || _root.ground.hitTest(_x-(_width/2)-ex, _y-_height, true)) {
_x += speed;
}
if (_root.ground.hitTest(_x, _y-_height-15, true)) {
grav = 1;
}
}