const u32 viscosity_factor = 0.5; // How much increase in viscosity affects movement, must range between 0 and 1 v3f d_wanted = -speed / (lplayer->movement_liquid_fluidity); d_wanted /= (viscosity_factor * lplayer->liquid_viscosity) + (1 - viscosity_factor); f32 dl = d_wanted.getLength(); if(dl > lplayer->movement_liquid_fluidity_smooth) dl = lplayer->movement_liquid_fluidity_smooth; v3f d = d_wanted.normalize() * dl; speed += d;