At the outset Risen3D was developed under the original iD license as this was the one that prevailed at the start of development. Following issues surrounding its validity the author decided to pull the plug. This was done, however, following a misunderstanding within the Risen3D team which led to yet more problems. On realising this the author attempted to resurrect the source but could only do so with a slightly earlier development build.

The author has now managed to update this build to incorporate the functions that were present in the build 60/61 bins. In order to try to satisfy everyone the source has been changed by the author to allow its release under the GPL. The author lost most of his changelogs when the plug was pulled and, given the thousands of changes that were made, it has not been possible to annotate them. In many ways the author feels that Risen3D has diverged to an extent that would have made annotating the changes difficult, if not impossible, in any event. In particular moving the Doomsday game dll and OpenGL dll into the main engine would have necessitated thousands of comments alone which was just not feasible.

Where any .c file uses code from another port then its header makes this clear. If anyone feels they have not been correctly represented by omission or otherwise then please let us know so that files can be amended as required.

As such this source is released in good faith and with the hope that others may find it useful.

Abbs - Risen3D site maintainer.

Note from the author (G Jackson);

Risen3D has been developed as a hobby and for the fun of so doing. Lately this has been no fun at all thanks to the bile on the doom forum following its release. This led me to calling it a day and deleting all the Risen3D main source code which was done, I thought, with the agreement of the Risen3D team. I then found, too late, that this wasn't the case. There followed much wailing and gnashing of teeth. By the sheerest good fortune I was able to resurrect a slightly earlier build made when v2.1.0 was in development else it really would be dead. Since the r3dglbsp and r3dgfiles sources were stored elsewhere on my system they had escaped deletion, so at least I was saved the trouble trying to retrieve these. I have now combined them all into one main file.

After a good deal of mucking about I was able to drag the main Risen3D source back up to give the same functionality as build 61. I then fixed a few other things and have now marked it build 62. I have have not included the original id license (as they released it under the GPL in 1999) so there is no licensing conflict. I have used the American spelling of 'license' deliberately so don't send emails about it.

With regard to the main Risen3D code I have further endeavoured to meet the terms of the GPL (GNU General Public License - LICENSE.txt) by heading all c files with the contributing authors' names and stating the ports used where applicable. As far as the date of changes made within the Risen3D code is concerned I have based it on the date of updating the c files headers for this build (62) and all references to 'R3D' or 'Risen3D' within these files assume the date in the header.

All the imported code used to develop Risen3D originates from Doom, Boom v2.10, ZDoom123beta33-src. Note that in the zdoom.txt contained in the 123beta33-src it is stated as being ZDOOM v1.22 December 12, 1999 (all released in the period 1998 to 1999) or code in Doomsday v1.7.08 which provides the main base. In the case of Doomsday it has been assumed that where no accreditation has been stated within a .c file and where that file's code is not based on functionality within the original Doom source (e.g. sound, models, particles) that the sole author is Jaakko Keränen. This exercise was undertaken in order to ensure that all 3rd party code contained in the source is licensed under the GPL or can be freely used with no restriction to prevent it being placed under the GPL (as this is a condition of the GPL) and that authors are properly accredited using a copyright notice (which is also required by the GPL). This has meant that being able to edit maps with a BEHAVIOR lump is no longer supported.

In general files named r3d_*.c and the m_winmem.c file contain code that has been developed from scratch without recourse to any other code base unless otherwise stated. In going through the source I also discovered there was barely a file I hadn't altered, amended or extended in some way which is testament to the amount of work that has been put into this port.

At the current time the multiplayer and networking code is either disabled or absent. Demos can only be recorded and played with maps not using the new Risen3D scripting extensions. It may be that someone else would like to have a go at rectifying this.

Certain areas of the code are somewhat obscure since I was never able to finish them.

In particular the analyser code will make grown men weep. When I started this project I was totally (blissfully as I now realise) unaware of the myriad of problems caused by the freeform nature of Doom. It happily runs with ill-designed maps and has very few rules imposed. This additionally causes problems for nodes builders.

As such I just ran into more and more problems the more maps I tried.

So, no matter which way I turned, all I could see were intractable problems. As such I decided to use an heuristic method, i.e. one that sent an unknown set of conditions through a series of filters, which I would add as required, to try and correct an indeterminate starting point as I came across them when testing maps. I also decided on this route because I found that if there's one way of fiddling something to look right in a Doom map then other authors would find a dozen other ways to do the same thing. I had some success with this but I (much) later realised that this should only be used as the last resort not the first. As such, over the last 18 months or so, I have been slowly adding a boundary based method where a boundary is traced and all subsectors contained within it are processed.

Progress has been slow because there is so much knowledge locked up in the heuristic routines that I felt that starting again (given one only retains 20% of what one has learnt) was not an option. As such I decided to implement a gradual changeover as a boundary trace cannot fix everything. With the benefit of hindsight I should have started again.

The result of the above is that the analyser is now an unholy mix poised somewhere between one method and the other. This has been made worse because I felt I knew what flags would be required to make the transition work but, as ever, underestimated the problems which led to yet more and more flags creeping in. I now reckon I know how this should be done, if starting again, but have run out of steam. Given the analyser works 99% of the time with difficult map constructions, with an acceptable error rate, I've decided it's not worth spending another year or more in starting again. If someone else can suss out what's what, and given the requisite boundary routines have all been written and tested and are contained in the trace routines in the source, and feels they can sort this out, then be my guest!

I have also tried to maintain the best frame rates by having pre-calculated steps done in the analyser before rendering is started. Thus in rend_main.c it might look horrifyingly complicated but in practice the lines' types set in the analyser (R3D_xx) work together with the additional subsector entries to provide a quick route through for awkward situations. This could now be simplified but would have to be done hand-in-hand with the analyser code.

With regard to other Risen3D specific features viz; slopes, scripting, sliding model doors and 3D lines (but not flats) then these are all fairly straight forward with slopes probably having the most changes implemented. The scripting could probably benefit from having a single, common, thinker but only if wanting to extend these to demo support etc.


Risen3D has been written to compile with MSVC 6.0++ SP3 and is Windows specific.

In MSVC the analyser c files are in the source\r3d_analyse,
the slopes and 3D line main c files are in the source\r3d_extensions,
and the new scripting stuff is in the source\r3d_script.

Tabbing uses a value of 4.

There's also an unsigned __int64 problem with MSVC 6.0 SP3 which might indicate other issues as well. I installed an upgrade from MS;


so this might also be required (assuming the link's still valid as I did this in Oct/04).

VC98 lib and include files;

You'll need the fmod sdk available from; http://www.fmod.org/


eax.h, eaxguid.lib from Creative Labs,
libpngd.lib, libz.lib, lzexpand.h from Microsoft, I believe, if not already in VC98

OpenGL headers, libs etc. from SGI also in NVidia's SDK.

NOTE: I can't be any more helpful, I'm afraid, as I installed these ages ago and cannot find my links.

Please don't ask me to send any of the above files as distribution by 3rd parties is not allowed.

If you've got any queries then please send them via the Risen3D site.


G. M. Jackson Oct 2006