soner du Posted December 8, 2017 I'm creating a simplified family tree, to ilustrate the French Wikipedia article https://fr.wikipedia.org/wiki/Portages_de_Doom 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) ? 19 Share this post Link to post
Jon Posted December 8, 2017 (edited) 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 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. 0 Share this post Link to post
EmotionalFelineinaMadstate Posted December 8, 2017 I found this chart to be pretty neat. 0 Share this post Link to post
soner du Posted December 8, 2017 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; } 1 Share this post Link to post
Arctangent Posted December 8, 2017 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. 3 Share this post Link to post
Gez Posted December 8, 2017 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... 2 Share this post Link to post
Graf Zahl Posted December 8, 2017 (edited) 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. 0 Share this post Link to post
Bauul Posted December 8, 2017 (edited) 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. 0 Share this post Link to post
Quasar Posted December 8, 2017 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". 1 Share this post Link to post
Shadow Hog Posted December 8, 2017 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. 0 Share this post Link to post
Jon Posted December 8, 2017 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? 0 Share this post Link to post
Gez Posted December 8, 2017 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. 0 Share this post Link to post
hawkwind Posted December 9, 2017 (edited) 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 December 9, 2017 by hawkwind 0 Share this post Link to post
soner du Posted December 9, 2017 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. 0 Share this post Link to post
Gez Posted December 9, 2017 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. 1 Share this post Link to post
Quasar Posted December 9, 2017 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). 0 Share this post Link to post
Gez Posted December 9, 2017 Seems to still be in the code, at least: https://github.com/id-Software/DOOM-iOS/blob/3bf2af22f381441faccb13652bcf992a43bb8eb5/code/prboom/p_setup.c#L831 https://github.com/id-Software/DOOM-iOS/blob/3bf2af22f381441faccb13652bcf992a43bb8eb5/code/prboom/p_spec.c#L2550 0 Share this post Link to post
Quasar Posted December 10, 2017 I think it's the rendering bit that's missing. 0 Share this post Link to post
SaladBadger Posted December 10, 2017 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. 2 Share this post Link to post
fabian Posted December 10, 2017 (edited) This chart is awesome, thanks for sharing it! 0 Share this post Link to post
soner du Posted December 11, 2017 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. 0 Share this post Link to post
fraggle Posted December 11, 2017 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. 1 Share this post Link to post
Blzut3 Posted December 12, 2017 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. 0 Share this post Link to post
Coraline Posted December 14, 2017 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! 1 Share this post Link to post
Linguica Posted December 14, 2017 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? 0 Share this post Link to post
Csonicgo Posted December 14, 2017 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. 0 Share this post Link to post
Gez Posted December 14, 2017 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. 0 Share this post Link to post
Coraline Posted December 14, 2017 (edited) @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 ^^ 0 Share this post Link to post