Not logged in, Join Here! or Log In Below:  
News Articles Search    

Submitted by Paul Holverda, posted on January 04, 2005

Image Description, by Paul Holverda

My first submittance to this great site, my engine has reach it's adult stage so i should give it a go :)

This image is from a game called Java Is DooMeD 2, a thank you to one of the greatest games of all time: DooM. My inspiration for a new engine came from my former programming work on a game called javaisdoomed. which can be found here:

Some technical stuff.
  • The engine has both a hardware-( via JOGL ) and a software renderer, although the latter isn't touched for months.

  • The Compiler takes a .map file( for now it is just Q3 maps, but with some modification, it can also be DooM III, Wolfenstein etc.etc. map )

  • Brushes are created from the raw map file, along with surface properties for each surface

  • With this brushes a BSP tree is created, which main purpose is collision detection.

  • Surfaces never seen in the final, compiled level are automatically discarded-

  • With the remaining surfaces a portal-based rendering system is build, the portals are placed by the level designers, which give great flexibilty to the rendering pipeline.

  • After all this is done, lightmaps are created for each surface. And since each surface can have it's own properties, the detail of the lightmaps can also be adjusted.

  • The engine and compiler are totally written in JAVA, hence the name Java is Doomed;)

  • Basic physic are applied to every item in the level(gravity, water, flying) furthermore, there is collision detection and response( sliding along walls!! ).
  • Future things of expansion are, adding an outdoor 'renderer' as well, since the engine is portal based it could be achievable. And of course adding realtime lighting.

    Cheers Paul

    Image of the Day Gallery


    Message Center / Reader Comments: ( To Participate in the Discussion, Join the Community )
    Archive Notice: This thread is old and no longer active. It is here for reference purposes. This thread was created on an older version of the flipcode forums, before the site closed in 2005. Please keep that in mind as you view this thread, as many of the topics and opinions may be outdated.

    January 04, 2005, 05:44 PM
    But aside from that, good "old-school" engine ;)
    Nice work, walking the Quake III way is always a lot of fun

    Rui Martins

    January 04, 2005, 05:51 PM

    Paul, You should check your skybox, since seams are evident in both pictures, you probably need to use GL_CLAMP_TO_EDGE in your skybox textures.

    Is the flame/effect on the right (lower pic) distorted ?
    Or is it just a texture splat ? Which looks distorted too.

    Are you also using lights, or is it all lightmaps ?
    I ask, because I can't see how light reaches the cealing wall on the left (lower picture).


    January 05, 2005, 03:59 AM

    Hi Paul,

    I've just saw your images of your 3d engine posted on I am currently working on a OpenGL based 3D engine as well and wondering about how to design such a map compiler. I am also interested in all the different technologies you used to speed up rendering (BSP, Portals, Lightmapping, ...). Where did you get the knowledge from? Do you have any hints for me where to start?

    Thanks for some info in advance!



    January 05, 2005, 10:09 AM

    [-WD40-] wrote:

    Why? Is it because you just don't like Java or what?

    Remember all the drawing is done through JOGL (or some other binding to OpenGL), which basically means that the drawing speed is the same as for calls made to openGL from C/C++ code.

    With JIT compilers Java has really become fast, so bashing it because "it's slow" isn't a serious argument.

    If high performance code is needed e.g. in a tight loop. Then you can write that code in your favorite language and use JNI Java Native Interface to talk with that piece of code. Simple stuff really... You can get both the benefits of a beutifull Java API and a managed environment plus "embedd" highperformance code in you loop.


    Paul Holverda

    January 05, 2005, 04:05 PM

    I will release the compiler code soon, there is a lot of unused code in it, that can be removed or otherwise modified.

    Basically creating a BSP level from a .map process involves these steps.

    1.Reading the all the plane-data from the file. Every brush consist of four or more planes.
    2. Next we clip each plane of the brush agains every otherplane, if a intersection is found add it to the corresponding polygon of the brush.

    3.After step #2 is completed we have our brushes that all define solid volumes
    Then CSG(Constructive solid Geometry ) should be performed on the brushes
    that intersects eachother thus creating, removing polygons inside other
    4.Now we have valid geometry that can be given to BSP-Compiler, this is just
    a normal BSP compiler, nothing fancy.
    5.After the BSP proces is completed portal polygons are created along the
    splitting planes of the nodes and then clipped against every other node.
    6.After step#5 we have the information of what leaf connects to other leafs,
    so visibilty information can be derived from it.

    as to answer your question of finding valuable resources, I have one document that described the .map format in detail. The rest of it was just trial and error( and a lot of a4's for drawing out various (2D) maps )



    Paul Holverda

    January 05, 2005, 05:18 PM

    @Rui Martins,

    I know that there are seams, but it isn't really a sky-box it's part of the level geometry, scaled several it acts as a skybox but it could have been any kind of geometry.

    about that texture, it's a friend of my praising our lord;), nothing special is done with it.

    All shadowing is still done with lightmaps, but i'm moving towards a realtime approach, still needs a lot research going on it.



    This thread contains 6 messages.
    Hosting by Solid Eight Studios, maker of PhotoTangler Collage Maker.