<i>This post was originally made by <b>danij</b> on the dengDevs blog. It was posted under the categories: Games, Version 1.9.</i>
Currently, code common to all games in <tt>Src/Common</tt> is interspersed with game-specific functionality (due, no doubt, to the difficulties of combining three different source codes). I understand that an ultimate goal is for all code in <tt>/Common</tt> to be truely common, but to reach that end requires a lot of work - hence the use of (eg) <tt>#ifdef __JDOOM__</tt> to branch the code where logic differs.
I noted recently (when begining work on a new game library) that this method of branching the logic is difficult to work with for a 3rd party game developer, as the same <tt>#define</tt>s are also used to control header inclusion (in <tt>Src/Common/*.c</tt>).
<!---more--->I think that most new games will probably begin life as modifications to an existing game (hence the logic will be (mostly) the same) but the included header files will not.
It would be easier for 3rd parties if there were two preprocessor directives - one to declare the logic and another to determine which game headers are included in common source code files. This would allow 3rd parties to quickly create a new "project" under a local copy of the source tree, making tracking changes in the offical source tree much easier.