It failed....
I investigated further "line" damages spells and Direction Bow, and found that a little buggy. Siementec uses iErr =0, and 0 is wrong...

So I investigated further. 1 is by far a beter value for iErr, but not optimal...
I discovered than choosing half of the biggest from dx & dy (rounded up) is very nice....

So there is the fix:
void GetPoint2(int x0, int y0, int x1, int y1, int * pX, int * pY, int * pError, int iCount)
{register int dx, dy, x_inc, y_inc, error, index;
register int iResultX, iResultY, iCnt = 0;
if ((x0 == x1) && (y0 == y1))
{ *pX = x0;
*pY = y0;
return;
}
error = *pError;
iResultX = x0;
iResultY = y0;
dx = x1-x0;
dy = y1-y0;
if(dx>=0)
{ x_inc = 1;
}else
{ x_inc = -1;
dx = -dx;
}
if(dy>=0)
{ y_inc = 1;
}else
{ y_inc = -1;
dy = -dy;
}
if(dx>dy)
{ error = (dx+1)/2;
Form1->Label1->Caption = error;
for(index = 0; index <= iCount; index++)
{ error += dy;
if(error > dx)
{ error -= dx;
iResultY += y_inc;
}
iResultX += x_inc;
iCnt++;
if (iCnt >= iCount) goto CALC_OK;
}
}else
{ error = (dy+1)/2;
Form1->Label1->Caption = error;
for(index = 0; index <= iCount; index++)
{ error += dx;
if(error > dy)
{ error -= dy;
iResultX += x_inc;
}
iResultY += y_inc;
iCnt++;
if (iCnt >= iCount) goto CALC_OK;
}
}
CALC_OK:;
*pX = iResultX;
*pY = iResultY;
*pError = error;
}