I worked on this some more and thought I would share the project in its current state. It has stabilized somewhat after adding the most recent round of new features:

1. Support for sloped surfaces which are perspective correct (more or less).

2. Faky displacement mapping for rendering liquidy surfaces, and underwater scenes.

3. Support for sector-over-sector geometries for greater geometric freedom. I think the way this is implemented is pretty elegant. It basically takes the whole X-Y doom renderer, and makes it recursive along Z. By cutting a hole in the floor, you can expose a run of pixels which are then backfilled later with another call to the raytracer. Hard to explain, but it was literally two lines of code added that enable a whole new class of map geometries to be modeled. (Although it only changed map rendering very slightly, it greatly complicated the code for clipping moving things against the map, and hence the long delay between my last update and this one - one bugchase after another).

There are debug lines added wherever this recursion takes place - in the doom-like regions, theres only a single pair of debug lines (one at the top, and one at the bottom) indicating that the whole scene was rendered in one-pass. But in the quake-like regions, there's debug lines all over the place, indicating the depth of recursion that was required to generate the scene. They'll be removed later, but it just looks really cool so it's in there for now.
4. Mipmap-like behavior where textures viewed from long distances are low-pass-filtered to remove some aliasing problems (this is only a partial fix to the aliasing problem, but I found I could do this very cheaply so I threw it in).

5. Fake "y-shearing" for limited up-down looking (changing elevation angle). I wanted this to be in there, because I want there to be tactical benefits for shooting the legs of an opponent vs. shooting their arms, or whatnot.

There are regions of the map which test out these features individually (theres a pool of water you can jump into to test the underwater rendering, and a hole cut into a floor which you can jump from one sector down into another). And there's also an elaborate room containing catwalks, piers and vast cavities that sort of combines all the features together into a detailed scene. This room has a real quakeish feel to it - the only way you can really tell that this is not true 3D rendering is that it doesn't distort properly when you look up and down). Of course, the frame rate sort of tanks in that room - so I don't think I will do such intricate regions in the real levels.



Here's a link to a zipped swf (200K). It requires a pretty good PC (18 FPS on my 2.4GHz box).

http://esl.eng.ohio-state.edu/~rac/doom.zip

And here's a link to zipped project source, if you want to muck around and see how it works. RaytracePanel is the real guts of the thing. It's heavily commented but it's still a long piece of monolithic source.

http://esl.eng.ohio-state.edu/~rac/doomsrc.zip

Bug reports welcome, but a lot of bugs are already known (particles don't fall through transparent floors yet, when the player moves the clipping is still a little off and sometimes you snap to walls somewhat weirdly - these are all to be addressed in the future). What I would like to hear about is any display bugs - I think they should be more or less ironed out. Like if an opponent pops up visible and you know they shouldn't be ... this is a serious problem that I would like to hear about. (screenshots welcome).

Controls : Arrow keys move you, space shoots, shift/control looks up down.

Enjoy Comment and critique welcome. I figured I don't want to get a reputation as someone who always badmouths 3D flash programs but never ponies up any work of their own! So... badmouth away!