Muchas gracias,
ya lo tengo más o menos desarrollado aunque tengo que hacer pruebas puesto que he tenido que hacer cambios al algoritmo:
class Program
    {
        static void Main(string[] args)
        {
            int xOrigen,yOrigen,xDestino,yDestino,metros;
            xOrigen=80;
            yOrigen =10;
            xDestino=34;
            yDestino =23;
            metros=5;
            while ((xOrigen != xDestino)||(yOrigen!=yDestino))
            {
                Console.WriteLine("X: " + xOrigen + "Y: " + yOrigen);
            SiguientePosicion(xOrigen,yOrigen,xDestino,yDestino, metros, out xOrigen, out yOrigen);
            }
            Console.ReadLine();
        }
        
        static void SiguientePosicion(int x0, int y0, int x1, int y1, int metros, out int x, out int y)
        {            
            int deltax = x1 - x0;
            int deltay = Math.Abs(y1 - y0);
            int error = deltax / 2;
            int ystep, xstep,xdirection;
            y = y0;
            if (x0 < x1)
            {
                xdirection = 1;
            }
            else
            {
                xdirection = -1;
            }
            x = x0;
                ystep = 0;
                xstep = 0;
                error = error - deltay;
                if (error < 0)
                {
                    if (y < y1)
                    {
                        if (Math.Abs(x - x1) > metros)
                        {
                            if (Math.Abs(y - y1) < metros / 2)
                            {
                                ystep = Math.Abs(y - y1);
                            }
                            else
                            {
                                ystep = metros / 2;
                            }
                        }
                        else
                        {
                            if (Math.Abs(y - y1) < metros)
                            {
                                ystep = Math.Abs(y - y1);
                            }
                            else
                            {
                                ystep = metros -(Math.Abs(x-x1));
                            }
                        }
                    }
                    else if (y > y1)
                    {
                        if (Math.Abs(x - x1) > metros)
                        {
                            if (Math.Abs(y - y1) < metros / 2)
                            {
                                ystep = -1*Math.Abs(y - y1);
                            }
                            else
                            {
                                ystep = -1*metros / 2;
                            }
                        }
                        else
                        {
                            if (Math.Abs(y - y1) < metros)
                            {
                                ystep = -1*Math.Abs(y - y1);
                            }
                            else
                            {
                                ystep = -1*metros - (Math.Abs(x - x1));
                            }
                        }
                    }
                    else
                    {
                        ystep = 0;
                    }
                    y = y + ystep;
                    if (Math.Abs(x - x1) < metros - Math.Abs(ystep))
                    {
                        xstep = Math.Abs(x - x1) * xdirection;
                    }
                    else
                    {
                        xstep = ((metros - Math.Abs(ystep)) * xdirection);
                    }
                    x = x+xstep;
                    error = error + deltax;
                }
                else
                {
                    if (Math.Abs(x - x1) < metros - Math.Abs(ystep))
                    {
                        xstep = Math.Abs(x - x1) * xdirection;
                    }
                    else
                    {
                        xstep = ((metros - Math.Abs(ystep)) * xdirection);
                    }
                    x = x + xstep;
                }
                  
        }
       
        static void swap(out int x1, out int y1, int x2, int y2)
        {
            x1=y2;
            y1=x2;       
        }
    }
Un saludo.