PHP Code:
	
		
#include std\player;
swim()
{
    swimspeed = 200;
    swimfactor = 0.05;
    swimcorrection = 35.5; //experimental random number (do not change)
    if(isdefined(self.swim_running) && self.swim_running)
        return; //dont double-start thread
    waters = getentarray("water", "targetname");
    touching = false;
    wastouching = false;
    while(isdefined(self) && isdefined(self.sessionstate) && self.sessionstate == "playing")
    {
        wastouching = touching;
        touching = false;
        for(i = 0; i < waters.size; i++)
        {
            if(self istouching(waters[i]))
            {
                touching = true;
                break;
            }
        }
        vec = (0, 0, 0);
        if(touching || wastouching)
        {
            fw = anglestoforward(self getplayerangles());
            rg = anglestoright(self getplayerangles());
            if(self leftButtonPressed())
                vec -= rg;
            if(self rightButtonPressed())
                vec += rg;
            if(self forwardButtonPressed())
                vec += fw;
            if(self backButtonPressed())
                vec -= fw;
            if(self leanleftButtonPressed())
                vec -= (0, 0, 1);
            if(self leanrightButtonPressed())
                vec += (0, 0, 1);
            vec = vectornormalize(vec);
            vec = maps\mp\_utility::vectorScale(vec, swimspeed);
        }
        if(touching)
        {
            currentspeed = self getVelocity();
            speed_diff = vec - currentspeed;
            speed = (speed_diff[0] * swimfactor, speed_diff[1] * swimfactor, speed_diff[2] * swimfactor + swimcorrection * (1 - 0.5 * self isonground()));
            self addVelocity(speed);
        }
        else if(wastouching && (vec[2] > swimspeed/10 || self jumpButtonPressed()))
        {
            currentspeed = self getVelocity();
            currentspeed = (currentspeed[0], currentspeed[1], 250);
            self setvelocity(currentspeed);
        }
        wait 0.05;
    }
    if(isdefined(self))
        self.swim_running = false;
}