Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Optimus

OptiDoom, my Doom port for 3DO.

Recommended Posts

4 hours ago, Redneckerz said:

I can't access your site atm, but are these things mentioned on your site? Because distortion and motion blur seem like really epic effects and unique to this port.

 

In any case Optidoom is highly impressive from day one.

Check out Optimus's youtube video for the 0.2b version. After the 28 minute of the video he shows off the gimmicks, the wireframe mode, the distortion effect, the spinning cube etc :D

Share this post


Link to post
1 hour ago, VGA said:

Check out Optimus's youtube video for the 0.2b version. After the 28 minute of the video he shows off the gimmicks, the wireframe mode, the distortion effect, the spinning cube etc :D

Thanks. Saw it and it looks really impressive, though its in full screen. But subtle buffers like the Atari Falcon port Bad Mood would definitely look fly :)

Share this post


Link to post
1 hour ago, Redneckerz said:

Thanks. Saw it and it looks really impressive, though its in full screen. But subtle buffers like the Atari Falcon port Bad Mood would definitely look fly :)

http://www.leonik.net/dml/sec_bm.py

 

Wow, that is interesting. Maybe Optimus can check out their ideas and code?

Share this post


Link to post
40 minutes ago, VGA said:

http://www.leonik.net/dml/sec_bm.py

 

Wow, that is interesting. Maybe Optimus can check out their ideas and code?

Doubtful, but hey. Bad Mood is extremely optimized for the platform, using the notoriously difficult-to-use DSP as a proto-GPU with various effects. Has been in development for several years and it shows. This is not a straight Doom port, but one to push the limits on its respective platform.

Share this post


Link to post

Interestingly enough I was looking at the source codes of GBADoom and ChocolateDoom for the R_MakeSpans function like here

The one that converts vertical visplane gaps to horizontal edges. I think it's a bottleneck on 3DO.

I was surprised the versions in the other ports look more clean and short than the one on 3DO (the big do-while loop in DrawVisPlane)

And I thought it should be slower, but looking it closer, algorithmically it seems to be doing roughly the same think as the others (comparing top bottom gaps from left to right, depending on inclination it will either mark horizontal edges or call to render a horizontal scanline)

 

But maybe, maybe... (and I haven't tested yet by converting the other codes, I need to be careful as it's a confusing code) the 3DO version was optimized to be doing less in the inner loop. While the others (chocolate doom, etc) are doing two checks in the inner loop (e.g. while (t1 < t2 && t1<=b1)) the 3DO code has some more if blocks, which however do these checks externally and ends up with a Count, it only increases it and does one check instead of more in the final loop.

 

So, I thought I could find something here (and I can still bother to try porting the other versions and measure (sometimes they do it with a while, sometimes with if, don't know which produces better code)) but it seems the 3DO programmer did the best to produce the optimal compiler code. I ask the compiler to display the produce ARM assembly code and man, it seems like it's pretty tight. All fit in registers, an ADD to increase, a CMP and a branch. I start wondering if there is less of a bottleneck here and more in the things happening in the later call to draw scanline (in MapPlane). Previously, when in my flat color visplane rendering I skipped this conversion and only drew vertical lines, at the same times I of course avoided the calls to  MapPlane. That's also why the flat visplanes without depth shading are way faster than the shaded untextured ones.

 

Anyway, still looking at it from time to time, at some point I'll change strategy and try to replace visplanes. But I wonder if there is a better algorithm for the conversion from vertical to horizontal edges. I kinda understand how this one works visualizing the pixels in my mind, but can't think of a better way of doing it.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×