* Less queuing in Dijkstra by using distance[] to indicate the lowest
queued distance (dir[] still doubles down as "seen" array). Drops
iterations from ~350 to ~150, 5.5 ms -> 2.0 ms
* Less raycast attempts in the shortcut method, barely noticeable but
avoids massive spikes from 7 to 35/75 ms in Lab with 40 entities (!!)
* General optimizations with -O3 instead of -Os (0.5-1.0 ms gained per
frame for ~6 kB increase in size)
* Compute pathfinding every 4th frame for each entity, instead of every
frame
Now basically a fairly 30 FPS, and that's 30 ms rendering + 3 ms
simulation.
Bugs fixed:
* AOEs whose origin died without recognizing them as their current
attack would keep referencing a dead entity
* Entities without dash could be considered dashing when knocked back
(still fragile)