The Path Of The Wildebeest
JavaScript (Node.js), &nbsp;191 ... 166&nbsp; 164 bytes

Saved 2 bytes thanks to @grimy.

Returns the \$N\$th term.

n=&gt;(g=(x,y)=&gt;n--?g(Buffer('QPNP1O?O@242Q3C3').map(m=c=&gt;g[i=4*((x+=c%6-2)*x&gt;(y+=c%7-2)*y?x:y)**2,i-=(x&gt;y||-1)*(i**.5+x+y)]|i&gt;m||(H=x,V=y,m=i))&amp;&amp;H,V,g[m]=1):m+1)(1,2)


Try it online! or See a formatted version

How?

Spiral indices

In order to convert the coordinates \$(x,y)\$ into the spiral index \$I\$, we first compute the layer \$L\$ with:

$$L=\max(|x|,|y|)$$

Which gives:

$$\begin{array}{c|ccccccc}
&amp;-3&amp;-2&amp;-1&amp;0&amp;+1&amp;+2&amp;+3\\
\hline
-3&amp;3&amp;3&amp;3&amp;3&amp;3&amp;3&amp;3\\
-2&amp;3&amp;2&amp;2&amp;2&amp;2&amp;2&amp;3\\
-1&amp;3&amp;2&amp;1&amp;1&amp;1&amp;2&amp;3\\
0&amp;3&amp;2&amp;1&amp;0&amp;1&amp;2&amp;3\\
+1&amp;3&amp;2&amp;1&amp;1&amp;1&amp;2&amp;3\\
+2&amp;3&amp;2&amp;2&amp;2&amp;2&amp;2&amp;3\\
+3&amp;3&amp;3&amp;3&amp;3&amp;3&amp;3&amp;3
\end{array}$$

We then compute the position \$P\$ in the layer with:

$$P=\begin{cases}
2L+x+y&amp;\text{if }x&gt;y\\
-(2L+x+y)&amp;\text{if }x\le y
\end{cases}$$

Which gives:

$$\begin{array}{c|ccccccc}
&amp;-3&amp;-2&amp;-1&amp;0&amp;+1&amp;+2&amp;+3\\
\hline
-3&amp;0&amp;1&amp;2&amp;3&amp;4&amp;5&amp;6\\
-2&amp;-1&amp;0&amp;1&amp;2&amp;3&amp;4&amp;7\\
-1&amp;-2&amp;-1&amp;0&amp;1&amp;2&amp;5&amp;8\\
0&amp;-3&amp;-2&amp;-1&amp;0&amp;3&amp;6&amp;9\\
+1&amp;-4&amp;-3&amp;-2&amp;-3&amp;-4&amp;7&amp;10\\
+2&amp;-5&amp;-4&amp;-5&amp;-6&amp;-7&amp;-8&amp;11\\
+3&amp;-6&amp;-7&amp;-8&amp;-9&amp;-10&amp;-11&amp;-12
\end{array}$$

The final index \$I\$ is given by:

$$I=4L^2-P$$

NB: The above formula gives a 0-indexed spiral.

In the JS code, we actually compute \$4L^2\$ right away with:

i = 4 * (x * x &gt; y * y ? x : y) ** 2


And then subtract \$P\$ with:

i -= (x &gt; y || -1) * (i ** 0.5 + x + y)


Moves of the wildebeest

Given the current position \$(x,y)\$, the 16 possible target squares of the wildebeest are tested in the following order:

$$\begin{array}{c|cccccccc}
&amp;-3&amp;-2&amp;-1&amp;x&amp;+1&amp;+2&amp;+3\\
\hline
-3&amp;\cdot&amp;\cdot&amp;9&amp;\cdot&amp;11&amp;\cdot&amp;\cdot\\
-2&amp;\cdot&amp;\cdot&amp;8&amp;\cdot&amp;10&amp;\cdot&amp;\cdot\\
-1&amp;7&amp;6&amp;\cdot&amp;\cdot&amp;\cdot&amp;12&amp;13\\
y&amp;\cdot&amp;\cdot&amp;\cdot&amp;\bullet&amp;\cdot&amp;\cdot&amp;\cdot\\
+1&amp;5&amp;4&amp;\cdot&amp;\cdot&amp;\cdot&amp;14&amp;15\\
+2&amp;\cdot&amp;\cdot&amp;2&amp;\cdot&amp;0&amp;\cdot&amp;\cdot\\
+3&amp;\cdot&amp;\cdot&amp;3&amp;\cdot&amp;1&amp;\cdot&amp;\cdot
\end{array}$$

We walk through them by applying 16 pairs of signed values \$(dx,dy)\$. Each pair is encoded as a single ASCII character.

 ID | char. | ASCII code | c%6-2 | c%7-2 | cumulated
----+-------+------------+-------+-------+-----------
  0 |  'Q'  |     81     |   +1  |   +2  |  (+1,+2)
  1 |  'P'  |     80     |    0  |   +1  |  (+1,+3)
  2 |  'N'  |     78     |   -2  |   -1  |  (-1,+2)
  3 |  'P'  |     80     |    0  |   +1  |  (-1,+3)
  4 |  '1'  |     49     |   -1  |   -2  |  (-2,+1)
  5 |  'O'  |     79     |   -1  |    0  |  (-3,+1)
  6 |  '?'  |     63     |   +1  |   -2  |  (-2,-1)
  7 |  'O'  |     79     |   -1  |    0  |  (-3,-1)
  8 |  '@'  |     64     |   +2  |   -1  |  (-1,-2)
  9 |  '2'  |     50     |    0  |   -1  |  (-1,-3)
 10 |  '4'  |     52     |   +2  |   +1  |  (+1,-2)
 11 |  '2'  |     50     |    0  |   -1  |  (+1,-3)
 12 |  'Q'  |     81     |   +1  |   +2  |  (+2,-1)
 13 |  '3'  |     51     |   +1  |    0  |  (+3,-1)
 14 |  'C'  |     67     |   -1  |   +2  |  (+2,+1)
 15 |  '3'  |     51     |   +1  |    0  |  (+3,+1)


We keep track of the minimum encountered value in \$m\$ and of the coordinates of the corresponding cell in \$(H,V)\$.

Once the best candidate has been found, we mark it as visited by setting a flag in the object \$g\$, which is also our main recursive function.

On the first iteration, we start with \$x=1\$ and \$y=2\$. This ensures that the first selected cell is \$(0,0)\$ and that it's the first cell to be marked as visited.