Boring parts all but done!
The picture is worth a thousand words, really - the boring support work is... mostly all done. Still need to enable the player to move the camera around and do the groundwork for the town menus, but that should be easy.
Once that's done, I can move on to the actual game part! Level generation and combat.
The biggest mistake I've made so far, by far, is holding off on trying to write visualization code when debugging the raytracer. I spent four hours trying to debug what I couldn't actually see, then spent about fifteen minutes writing this:
which showed the problem immediately.
The other big mistake was not resorting to brute force. I spent the rest of Tuesday trying to implement proper ray tracing - finding the exact distance to the wall in exactly as many steps as there are grid cells between you and the wall - and kept running into to issue after issue after issue, and finally gave up and used a naive brute force algorithm that just steps 1/100th of a cell at a time, accelerated with Numba, and it worked perfectly the first time. Between those two issues, Tuesday was a complete wash. Still, I've got time.