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

Doom Source Ports family tree (simplified, for Wikipedia)

Recommended Posts

Doesn't Skulltag derive also from csDoom?

Share this post


Link to post
3 hours ago, soner du said:

I'm creating a simplified family tree, to ilustrate the French Wikipedia article https://fr.wikipedia.org/wiki/Portages_de_Doom

 

doom-p10.png

It's based on information from https://doomwiki.org

It's deliberately focused on Doom proper (not Heretic, etc.), I've not listed recently dead projects (Vavoom, ReMooD) and some minor ancestors (LxDoom, ATBDoom..)...

 

What do you think of it ?

Which information shall I add (or remove) ?

 

I think it's an awesome idea, it was a project on my personal back-burner that had gone nowhere, I hope you are prepared to share the source in an open-source friendly manner so we can adapt/re-use it in other places too, not least Doomwiki itself!

 

The amount of info to include would differ a lot between DW and WP. I suggest thinking of the criteria for inclusion and seeing what would result.

 

Remood and Sonic Robo Blast 2 are derivatives of Doom Legacy; I would double-check whether zdoom was based on linuxdoom or dosdoom (I thought the latter but I'm not an expert on zdoom matters).  Also EDGE probably belongs between dosdoom and 3DGE.

 

Delphi doom is an interesting inclusion, I wonder if mocha doom could be considered a derivative or not in the same way?

 

Finally adding mobile versions would be interesting.

 

Share this post


Link to post
28 minutes ago, Jon said:

Also EDGE probably belongs between dosdoom and 3DGE.

Is 3DGE that different from EDGE ?

I've made the choice not to detail versions of the same port, otherwise the graph would be much more complicated (WinDoom based on Doom 1.8, LinuxDoom based on Doom 1.9 etc).

 

24 minutes ago, Jon said:

... I hope you are prepared to share the source in an open-source friendly manner so we can adapt/re-use it in other places too, not least Doomwiki itself!

It's just standard .dot script + graphviz.

 

Spoiler

digraph Ports {

/* options graphiques */

 

/* declaration des noeuds */

node [label="Chocolate Doom", fontsize=10] choco;

node [label="Crispy Doom"] crispy;

node [label="Doomsday Engine"] doomsday;

 

node [label="Linux Doom", shape=ellipse, color=black, style="filled", fillcolor="grey", fontsize=8] linux;

node [label="JDoom"] jdoom;

node [label="DOSDoom"] dos;

node [label="WinDoom"] win;

node [label="Doom", shape=box, color=red, fillcolor=yellow, fontsize=10] doom;

node [label="Doom95"] 95;

 

/* clusters */

subgraph clusterboom {

label="BOOM-compatible";

labeljust="l";

color=lightblue;

fontcolor=blue;

style="filled";

filcolor="lightblue";

 

node [label="Doom Legacy", shape=ellipse, color=black, fillcolor=white, fontsize=10] legacy;

node [label="3DGE"] dge;

node [label="Odamex"] odamex;

node [label="Risen3D"] risen3d;

node [label="GZDoom"] gzdoom;

node [label="QZDoom"] qzdoom;

node [label="Zandronum"] zandronum;

node [label="ZDaemon"] zdaemon;

node [label="Eternity Engine"] eternity;

node [label="PrBoom+"] prboomplus;

node [label="Doom Retro"] retro;

node [label="Delphi Doom"] delphi;

 

node [label="Doom Classic", shape=box, color=red, fillcolor=yellow] classic;

 

node [label="ZDoom", shape=ellipse, color=black, style="filled", fillcolor="grey", fontsize=8] zdoom;

node [label="MBF"] mbf;

node [label="SMMU"] smmu;

node [label="PrBoom"] prboom;

node [label="csDoom"] csdoom;

node [label="BOOM"] boom;

node [label="Skulltag"] skulltag;

};

 

/* relations */

skulltag -> {zandronum};

boom -> {mbf prboom};

prboom -> {prboomplus classic};

mbf -> smmu;

choco -> {crispy retro};

linux -> {choco dos jdoom zdoom delphi};

dos -> {boom legacy dge};

{doomsday boom} -> risen3d

jdoom -> doomsday;

doom -> linux, boom, win;

win -> 95;

zdoom -> {gzdoom csdoom zdaemon skulltag};

csdoom -> {odamex zdaemon};

gzdoom -> skulltag;

gzdoom -> qzdoom;

qzdoom -> gzdoom;

smmu -> eternity;

}

 

Share this post


Link to post
24 minutes ago, soner du said:

I've made the choice not to detail versions of the same port, otherwise the graph would be much more complicated (WinDoom based on Doom 1.8, LinuxDoom based on Doom 1.9 etc).

I mean, you have both GZDoom and QZDoom on there, and the difference between those two is far, far, far less than the difference between EDGE and 3DGE.

Share this post


Link to post
47 minutes ago, Jon said:

Remood and Sonic Robo Blast 2 are derivatives of Doom Legacy; I would double-check whether zdoom was based on linuxdoom or dosdoom (I thought the latter but I'm not an expert on zdoom matters).  Also EDGE probably belongs between dosdoom and 3DGE.

ReMood has been excluded for being dead; SRB2 is not a Doom source port even if it's based on one (all the Doom-specific support code was removed).

 

ZDoom was historically based on NTDoom and ATB Doom. However I doubt that there's any line of code specifically from either of these that remains in the codebase. More specifically, NTDoom was directly ported from the released Doom source code (so, based on Linux Doom) and was made to run on Win32 system. ZDoom took that base, and grafted on it the input code (mouse, joystick, keyboard) from ATB Doom. With v1.23, the first big block of code from NTDoom (the MIDAS a.k.a. Housemarque audio system) was removed and replaced with FMOD stuff. The input code from ATBD was entirely rewritten at least once (2.4.0) so nothing should remain from Andy Bay's stuff. The core system interface stuff has been rewritten and refactored several times to make ZDoom crossplatform (Linux and OS X became officially supported) and adapt to evolutions of the Windows platform; so I don't think much remains from NT Doom either. Perhaps the tic timer, which has just been rewritten in GZDoom...

Share this post


Link to post

Just looking at the sources for these two ports, nobody would ever connect them with ZDoom.

Whatever was borrowed from them has been replaced long, long ago.

 

Share this post


Link to post

This is a super neat idea, good job!

 

From a visual point of view, I'd include a legend if you can: I'm guessing yellow are official releases, white are active releases and grey are non-active releases?

 

Also, and this might be a contentious point, but I might suggest the position of some nodes implies a development "advancement" that isn't there.  For example, on casual glance, the viewer might presume Zandronum and Eternity are the two most advanced source ports because they're at the lowest position on the scale.  

 

I might move Skulltag up to be next to GZDoom and Zandronum therefore next to QZDoom.  I might move Risen 3D one step to the right and move SMMU/Eternity up a block into the gap.  Then all the source-ports along the bottom are equal, which I think avoids any implication that distance-from-the-top means anything.

 

Edit: Also +1 to including EDGE separately to 3DGE.  They're far more separate ports than GZDoom and QZDoom.

Share this post


Link to post

Just to be clear the criteria used for building the wiki's genealogy charts is "historically based on" and not "currently using the same code as".

Share this post


Link to post
3 hours ago, Gez said:

SRB2 is not a Doom source port even if it's based on one (all the Doom-specific support code was removed).

Also, Wikipedia insists it's not notable enough for an article.

Share this post


Link to post
6 hours ago, soner du said:

Is 3DGE that different from EDGE ?

I've made the choice not to detail versions of the same port, otherwise the graph would be much more complicated (WinDoom based on Doom 1.8, LinuxDoom based on Doom 1.9 etc).

 

I think edge versus 3dge is like prboom versus prboom+: one os built on the other, which has stopped.

 

 

6 hours ago, soner du said:

 

It's just standard .dot script + graphviz.

 

  Reveal hidden contents

digraph Ports {

/* options graphiques */

 

/* declaration des noeuds */

node [label="Chocolate Doom", fontsize=10] choco;

node [label="Crispy Doom"] crispy;

node [label="Doomsday Engine"] doomsday;

 

node [label="Linux Doom", shape=ellipse, color=black, style="filled", fillcolor="grey", fontsize=8] linux;

node [label="JDoom"] jdoom;

node [label="DOSDoom"] dos;

node [label="WinDoom"] win;

node [label="Doom", shape=box, color=red, fillcolor=yellow, fontsize=10] doom;

node [label="Doom95"] 95;

 

/* clusters */

subgraph clusterboom {

label="BOOM-compatible";

labeljust="l";

color=lightblue;

fontcolor=blue;

style="filled";

filcolor="lightblue";

 

node [label="Doom Legacy", shape=ellipse, color=black, fillcolor=white, fontsize=10] legacy;

node [label="3DGE"] dge;

node [label="Odamex"] odamex;

node [label="Risen3D"] risen3d;

node [label="GZDoom"] gzdoom;

node [label="QZDoom"] qzdoom;

node [label="Zandronum"] zandronum;

node [label="ZDaemon"] zdaemon;

node [label="Eternity Engine"] eternity;

node [label="PrBoom+"] prboomplus;

node [label="Doom Retro"] retro;

node [label="Delphi Doom"] delphi;

 

node [label="Doom Classic", shape=box, color=red, fillcolor=yellow] classic;

 

node [label="ZDoom", shape=ellipse, color=black, style="filled", fillcolor="grey", fontsize=8] zdoom;

node [label="MBF"] mbf;

node [label="SMMU"] smmu;

node [label="PrBoom"] prboom;

node [label="csDoom"] csdoom;

node [label="BOOM"] boom;

node [label="Skulltag"] skulltag;

};

 

/* relations */

skulltag -> {zandronum};

boom -> {mbf prboom};

prboom -> {prboomplus classic};

mbf -> smmu;

choco -> {crispy retro};

linux -> {choco dos jdoom zdoom delphi};

dos -> {boom legacy dge};

{doomsday boom} -> risen3d

jdoom -> doomsday;

doom -> linux, boom, win;

win -> 95;

zdoom -> {gzdoom csdoom zdaemon skulltag};

csdoom -> {odamex zdaemon};

gzdoom -> skulltag;

gzdoom -> qzdoom;

qzdoom -> gzdoom;

smmu -> eternity;

}

 

 

That's great. Would you be prepared to license it under a Creative Commons license?

Share this post


Link to post
1 hour ago, Shadow Hog said:

Also, Wikipedia insists it's not notable enough for an article.

Neither are any of the other source ports, anyway.

Share this post


Link to post

MBF should also be linked to Risen3D

 

also, I might be wrong, but should not Doom Classic be outside the Boom compatible area ? Same might apply to Doom Retro and Delphi Doom.

Edited by hawkwind

Share this post


Link to post
22 hours ago, Arctangent said:

I mean, you have both GZDoom and QZDoom on there, and the difference between those two is far, far, far less than the difference between EDGE and 3DGE.

You're right, I may add EDGE above (Hyper)3DGE.

 

16 hours ago, Jon said:

That's great. Would you be prepared to license it under a Creative Commons license?

Of course ! I will probably release this work (both the code and .png export) under CC0 licence.

 

11 hours ago, hawkwind said:

MBF should also be linked to Risen3D

 

also, I might be wrong, but should not Doom Classic be outside the Boom compatible area ? Same might apply to Doom Retro and Delphi Doom.

Are you sure about Risen3D ? Anyways, if some minor code or feature (like friendly dogs) has been borrowed from another port, I'm not putting it on the chart. At first, I tried to put dotted lines for such links, but the result was graphically confusing.

DelphiDoom and Doom Retro are definitely BOOM-compatible, that's one of their goals. I don't know if Doom Classic is.

Share this post


Link to post

Doom Classic was built from PrBoom, and I don't think any of the Boom-related code was removed. You still find things like p_genlin.c and so on.

Share this post


Link to post

Dunno if it was removed entirely but I do know Carmack at the least disabled the ability to use 242 effects, because he said it was killing cache performance (big shocker).

Share this post


Link to post

Doom Classic is the official iOS port of Doom, though confusingly that name is also applied to the port used for some of the console editions and Doom 3 BFG Edition, which is an entirely different codebase derived from the original rather than prboom.

Share this post


Link to post
13 hours ago, fabian said:

This chart is awesome, thanks for sharing it!

I used to make some attempts with flashy heuristic gizmos (like XMind or FreePlane) but Graphviz is an amazingly simple and powerful tool.

 

On 08/12/2017 at 7:06 PM, Bauul said:

From a visual point of view, I'd include a legend if you can: I'm guessing yellow are official releases, white are active releases and grey are non-active releases?

 

Also, and this might be a contentious point, but I might suggest the position of some nodes implies a development "advancement" that isn't there.  For example, on casual glance, the viewer might presume Zandronum and Eternity are the two most advanced source ports because they're at the lowest position on the scale.  

 

I might move Skulltag up to be next to GZDoom and Zandronum therefore next to QZDoom.  I might move Risen 3D one step to the right and move SMMU/Eternity up a block into the gap.  Then all the source-ports along the bottom are equal, which I think avoids any implication that distance-from-the-top means anything.

 

Edit: Also +1 to including EDGE separately to 3DGE.  They're far more separate ports than GZDoom and QZDoom.

OK, I'll include a legend, and separate EDGE & 3DGE.

I'm not sure about moving nodes around ... I may try a few thing but I want to be as neutral as possible (after all, Chocolate doom is very advanced is its oldschoolness) and having to much stuff at the bottom could make thinks less readeable.

Share this post


Link to post

I wouldn't bother including "WinDoom" in the diagram since it was never publicly released.

 

EDGE and 3DGE should definitely be separate; the PrBoom/PrBoom+ analogy is a good one.

 

I think JDoom and Doomsday Engine are the same thing? So just list Doomsday Engine.

Share this post


Link to post

Mostly just to bring up an opposing viewpoint I wonder if, given the point is to keep things simple, there's any point to including single child parents.  That is remove WinDoom, MBF, SMMU, Skulltag, JDoom, and continue leaving out EDGE.  If I'm reading the tree without context of the community as a whole the stepping stones honestly don't say anything about the relationship between the ports in question and thus not really useful information.

Share this post


Link to post

The DOSDoom bubble needs work. Even if Legacy was derived from it, showing Legacy and 3DGE derive with the same diagonal lines is sort of misleading - let me try and explain. :-)

 

While Legacy came from an earlier DOSDoom version, DOSDoom was merely renamed to EDGE and continued from there. Seeing as how DOSDoom developed the first scripting languages (DDF and RTS) which continue to define 3DGE, it is unintentionally misleading. Legacy did not inherit the same features from DOSDoom.

 

If anything, the arrow should come out horizontally from DOSDoom while 3DGE should remain verticle, because Legacy did not inherit the defining features of DOSDoom like EDGE did as a direct successor.

 

Or, keep DOSDoom as v0.2, and create a new DOSDoom entry (0.63-0.65) which became absorbed completely into EDGE (and later 3DGE). That way Legacy can keep its position if you want. Because, even if the team changed up later, DOSDoom is DOSDoom is EDGE, as Chi let them continue progress when he left (both of the Andy's might know more though).

 

Just my two cents, maybe I am being picky though! ;-) good work regardless!

Share this post


Link to post

Are there any tools that actually analyze all the lines of code across codebases in order to attempt to determine the amount of shared code and its lineage?

Share this post


Link to post
1 minute ago, Linguica said:

Are there any tools that actually analyze all the lines of code across codebases in order to attempt to determine the amount of shared code and it’s lineage?

I would love to see what ZDoom had/ still has from other ports.

Share this post


Link to post
1 hour ago, Coraline said:

Or, keep DOSDoom as v0.2, and create a new DOSDoom entry (0.63-0.65) which became absorbed completely into EDGE (and later 3DGE).

That kind of goes against soner du's desire for simplicity (skipping over minor ancestors, not separating between different versions of a port, and so on), though.

Share this post


Link to post

@Gez ah. Of course, no big deal, sometimes I overcomplicate simplicity :D

 

@Ling: that'd be very cool, I would like to see something similar! Going back through DOSDoom's later code from 1998, there is still pieces from it in current EDGE :-) thought that was amusing ^^

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
×