* 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)
* Make all hitboxes rectangles
* Add sprite-based hitboxes for attacks, keep the original ones only for
map wall collisions
* Reorganize and rename animations
* Separate player movement and swing animation for the AoE
* Define more-useful primitives that are fixed in a coordinate system
* Provide conversion functions to and from integers as we need it
occasionally and it's better to have it at hand
* Add geometric functions (scale/translate)
* settings.h: Global settings to play around with
* fixed.h: Utilites for fixed-point numbers (incomplete but clean)
* level.h: Storage format of levels (PROTOTYPE >9000)
* map.h: Dynamic format for loaded levels (PROTOTYPE)
* render.h: Camera management and rendering (pretty clean)