Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  2.     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  4. <head>
  5. <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
  6. <meta name="generator" content="AsciiDoc 8.6.9" />
  7. <title>Freedoom</title>
  8. <style type="text/css">
  9. /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
  10.  
  11. /* Default font. */
  12. body {
  13.   font-family: Georgia,serif;
  14. }
  15.  
  16. /* Title font. */
  17. h1, h2, h3, h4, h5, h6,
  18. div.title, caption.title,
  19. thead, p.table.header,
  20. #toctitle,
  21. #author, #revnumber, #revdate, #revremark,
  22. #footer {
  23.   font-family: Arial,Helvetica,sans-serif;
  24. }
  25.  
  26. body {
  27.   margin: 1em 5% 1em 5%;
  28. }
  29.  
  30. a {
  31.   color: blue;
  32.   text-decoration: underline;
  33. }
  34. a:visited {
  35.   color: fuchsia;
  36. }
  37.  
  38. em {
  39.   font-style: italic;
  40.   color: navy;
  41. }
  42.  
  43. strong {
  44.   font-weight: bold;
  45.   color: #083194;
  46. }
  47.  
  48. h1, h2, h3, h4, h5, h6 {
  49.   color: #527bbd;
  50.   margin-top: 1.2em;
  51.   margin-bottom: 0.5em;
  52.   line-height: 1.3;
  53. }
  54.  
  55. h1, h2, h3 {
  56.   border-bottom: 2px solid silver;
  57. }
  58. h2 {
  59.   padding-top: 0.5em;
  60. }
  61. h3 {
  62.   float: left;
  63. }
  64. h3 + * {
  65.   clear: left;
  66. }
  67. h5 {
  68.   font-size: 1.0em;
  69. }
  70.  
  71. div.sectionbody {
  72.   margin-left: 0;
  73. }
  74.  
  75. hr {
  76.   border: 1px solid silver;
  77. }
  78.  
  79. p {
  80.   margin-top: 0.5em;
  81.   margin-bottom: 0.5em;
  82. }
  83.  
  84. ul, ol, li > p {
  85.   margin-top: 0;
  86. }
  87. ul > li     { color: #aaa; }
  88. ul > li > * { color: black; }
  89.  
  90. .monospaced, code, pre {
  91.   font-family: "Courier New", Courier, monospace;
  92.   font-size: inherit;
  93.   color: navy;
  94.   padding: 0;
  95.   margin: 0;
  96. }
  97. pre {
  98.   white-space: pre-wrap;
  99. }
  100.  
  101. #author {
  102.   color: #527bbd;
  103.   font-weight: bold;
  104.   font-size: 1.1em;
  105. }
  106. #email {
  107. }
  108. #revnumber, #revdate, #revremark {
  109. }
  110.  
  111. #footer {
  112.   font-size: small;
  113.   border-top: 2px solid silver;
  114.   padding-top: 0.5em;
  115.   margin-top: 4.0em;
  116. }
  117. #footer-text {
  118.   float: left;
  119.   padding-bottom: 0.5em;
  120. }
  121. #footer-badges {
  122.   float: right;
  123.   padding-bottom: 0.5em;
  124. }
  125.  
  126. #preamble {
  127.   margin-top: 1.5em;
  128.   margin-bottom: 1.5em;
  129. }
  130. div.imageblock, div.exampleblock, div.verseblock,
  131. div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
  132. div.admonitionblock {
  133.   margin-top: 1.0em;
  134.   margin-bottom: 1.5em;
  135. }
  136. div.admonitionblock {
  137.   margin-top: 2.0em;
  138.   margin-bottom: 2.0em;
  139.   margin-right: 10%;
  140.   color: #606060;
  141. }
  142.  
  143. div.content { /* Block element content. */
  144.   padding: 0;
  145. }
  146.  
  147. /* Block element titles. */
  148. div.title, caption.title {
  149.   color: #527bbd;
  150.   font-weight: bold;
  151.   text-align: left;
  152.   margin-top: 1.0em;
  153.   margin-bottom: 0.5em;
  154. }
  155. div.title + * {
  156.   margin-top: 0;
  157. }
  158.  
  159. td div.title:first-child {
  160.   margin-top: 0.0em;
  161. }
  162. div.content div.title:first-child {
  163.   margin-top: 0.0em;
  164. }
  165. div.content + div.title {
  166.   margin-top: 0.0em;
  167. }
  168.  
  169. div.sidebarblock > div.content {
  170.   background: #ffffee;
  171.   border: 1px solid #dddddd;
  172.   border-left: 4px solid #f0f0f0;
  173.   padding: 0.5em;
  174. }
  175.  
  176. div.listingblock > div.content {
  177.   border: 1px solid #dddddd;
  178.   border-left: 5px solid #f0f0f0;
  179.   background: #f8f8f8;
  180.   padding: 0.5em;
  181. }
  182.  
  183. div.quoteblock, div.verseblock {
  184.   padding-left: 1.0em;
  185.   margin-left: 1.0em;
  186.   margin-right: 10%;
  187.   border-left: 5px solid #f0f0f0;
  188.   color: #888;
  189. }
  190.  
  191. div.quoteblock > div.attribution {
  192.   padding-top: 0.5em;
  193.   text-align: right;
  194. }
  195.  
  196. div.verseblock > pre.content {
  197.   font-family: inherit;
  198.   font-size: inherit;
  199. }
  200. div.verseblock > div.attribution {
  201.   padding-top: 0.75em;
  202.   text-align: left;
  203. }
  204. /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
  205. div.verseblock + div.attribution {
  206.   text-align: left;
  207. }
  208.  
  209. div.admonitionblock .icon {
  210.   vertical-align: top;
  211.   font-size: 1.1em;
  212.   font-weight: bold;
  213.   text-decoration: underline;
  214.   color: #527bbd;
  215.   padding-right: 0.5em;
  216. }
  217. div.admonitionblock td.content {
  218.   padding-left: 0.5em;
  219.   border-left: 3px solid #dddddd;
  220. }
  221.  
  222. div.exampleblock > div.content {
  223.   border-left: 3px solid #dddddd;
  224.   padding-left: 0.5em;
  225. }
  226.  
  227. div.imageblock div.content { padding-left: 0; }
  228. span.image img { border-style: none; vertical-align: text-bottom; }
  229. a.image:visited { color: white; }
  230.  
  231. dl {
  232.   margin-top: 0.8em;
  233.   margin-bottom: 0.8em;
  234. }
  235. dt {
  236.   margin-top: 0.5em;
  237.   margin-bottom: 0;
  238.   font-style: normal;
  239.   color: navy;
  240. }
  241. dd > *:first-child {
  242.   margin-top: 0.1em;
  243. }
  244.  
  245. ul, ol {
  246.     list-style-position: outside;
  247. }
  248. ol.arabic {
  249.   list-style-type: decimal;
  250. }
  251. ol.loweralpha {
  252.   list-style-type: lower-alpha;
  253. }
  254. ol.upperalpha {
  255.   list-style-type: upper-alpha;
  256. }
  257. ol.lowerroman {
  258.   list-style-type: lower-roman;
  259. }
  260. ol.upperroman {
  261.   list-style-type: upper-roman;
  262. }
  263.  
  264. div.compact ul, div.compact ol,
  265. div.compact p, div.compact p,
  266. div.compact div, div.compact div {
  267.   margin-top: 0.1em;
  268.   margin-bottom: 0.1em;
  269. }
  270.  
  271. tfoot {
  272.   font-weight: bold;
  273. }
  274. td > div.verse {
  275.   white-space: pre;
  276. }
  277.  
  278. div.hdlist {
  279.   margin-top: 0.8em;
  280.   margin-bottom: 0.8em;
  281. }
  282. div.hdlist tr {
  283.   padding-bottom: 15px;
  284. }
  285. dt.hdlist1.strong, td.hdlist1.strong {
  286.   font-weight: bold;
  287. }
  288. td.hdlist1 {
  289.   vertical-align: top;
  290.   font-style: normal;
  291.   padding-right: 0.8em;
  292.   color: navy;
  293. }
  294. td.hdlist2 {
  295.   vertical-align: top;
  296. }
  297. div.hdlist.compact tr {
  298.   margin: 0;
  299.   padding-bottom: 0;
  300. }
  301.  
  302. .comment {
  303.   background: yellow;
  304. }
  305.  
  306. .footnote, .footnoteref {
  307.   font-size: 0.8em;
  308. }
  309.  
  310. span.footnote, span.footnoteref {
  311.   vertical-align: super;
  312. }
  313.  
  314. #footnotes {
  315.   margin: 20px 0 20px 0;
  316.   padding: 7px 0 0 0;
  317. }
  318.  
  319. #footnotes div.footnote {
  320.   margin: 0 0 5px 0;
  321. }
  322.  
  323. #footnotes hr {
  324.   border: none;
  325.   border-top: 1px solid silver;
  326.   height: 1px;
  327.   text-align: left;
  328.   margin-left: 0;
  329.   width: 20%;
  330.   min-width: 100px;
  331. }
  332.  
  333. div.colist td {
  334.   padding-right: 0.5em;
  335.   padding-bottom: 0.3em;
  336.   vertical-align: top;
  337. }
  338. div.colist td img {
  339.   margin-top: 0.3em;
  340. }
  341.  
  342. @media print {
  343.   #footer-badges { display: none; }
  344. }
  345.  
  346. #toc {
  347.   margin-bottom: 2.5em;
  348. }
  349.  
  350. #toctitle {
  351.   color: #527bbd;
  352.   font-size: 1.1em;
  353.   font-weight: bold;
  354.   margin-top: 1.0em;
  355.   margin-bottom: 0.1em;
  356. }
  357.  
  358. div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  359.   margin-top: 0;
  360.   margin-bottom: 0;
  361. }
  362. div.toclevel2 {
  363.   margin-left: 2em;
  364.   font-size: 0.9em;
  365. }
  366. div.toclevel3 {
  367.   margin-left: 4em;
  368.   font-size: 0.9em;
  369. }
  370. div.toclevel4 {
  371.   margin-left: 6em;
  372.   font-size: 0.9em;
  373. }
  374.  
  375. span.aqua { color: aqua; }
  376. span.black { color: black; }
  377. span.blue { color: blue; }
  378. span.fuchsia { color: fuchsia; }
  379. span.gray { color: gray; }
  380. span.green { color: green; }
  381. span.lime { color: lime; }
  382. span.maroon { color: maroon; }
  383. span.navy { color: navy; }
  384. span.olive { color: olive; }
  385. span.purple { color: purple; }
  386. span.red { color: red; }
  387. span.silver { color: silver; }
  388. span.teal { color: teal; }
  389. span.white { color: white; }
  390. span.yellow { color: yellow; }
  391.  
  392. span.aqua-background { background: aqua; }
  393. span.black-background { background: black; }
  394. span.blue-background { background: blue; }
  395. span.fuchsia-background { background: fuchsia; }
  396. span.gray-background { background: gray; }
  397. span.green-background { background: green; }
  398. span.lime-background { background: lime; }
  399. span.maroon-background { background: maroon; }
  400. span.navy-background { background: navy; }
  401. span.olive-background { background: olive; }
  402. span.purple-background { background: purple; }
  403. span.red-background { background: red; }
  404. span.silver-background { background: silver; }
  405. span.teal-background { background: teal; }
  406. span.white-background { background: white; }
  407. span.yellow-background { background: yellow; }
  408.  
  409. span.big { font-size: 2em; }
  410. span.small { font-size: 0.6em; }
  411.  
  412. span.underline { text-decoration: underline; }
  413. span.overline { text-decoration: overline; }
  414. span.line-through { text-decoration: line-through; }
  415.  
  416. div.unbreakable { page-break-inside: avoid; }
  417.  
  418.  
  419. /*
  420.  * xhtml11 specific
  421.  *
  422.  * */
  423.  
  424. div.tableblock {
  425.   margin-top: 1.0em;
  426.   margin-bottom: 1.5em;
  427. }
  428. div.tableblock > table {
  429.   border: 3px solid #527bbd;
  430. }
  431. thead, p.table.header {
  432.   font-weight: bold;
  433.   color: #527bbd;
  434. }
  435. p.table {
  436.   margin-top: 0;
  437. }
  438. /* Because the table frame attribute is overriden by CSS in most browsers. */
  439. div.tableblock > table[frame="void"] {
  440.   border-style: none;
  441. }
  442. div.tableblock > table[frame="hsides"] {
  443.   border-left-style: none;
  444.   border-right-style: none;
  445. }
  446. div.tableblock > table[frame="vsides"] {
  447.   border-top-style: none;
  448.   border-bottom-style: none;
  449. }
  450.  
  451.  
  452. /*
  453.  * html5 specific
  454.  *
  455.  * */
  456.  
  457. table.tableblock {
  458.   margin-top: 1.0em;
  459.   margin-bottom: 1.5em;
  460. }
  461. thead, p.tableblock.header {
  462.   font-weight: bold;
  463.   color: #527bbd;
  464. }
  465. p.tableblock {
  466.   margin-top: 0;
  467. }
  468. table.tableblock {
  469.   border-width: 3px;
  470.   border-spacing: 0px;
  471.   border-style: solid;
  472.   border-color: #527bbd;
  473.   border-collapse: collapse;
  474. }
  475. th.tableblock, td.tableblock {
  476.   border-width: 1px;
  477.   padding: 4px;
  478.   border-style: solid;
  479.   border-color: #527bbd;
  480. }
  481.  
  482. table.tableblock.frame-topbot {
  483.   border-left-style: hidden;
  484.   border-right-style: hidden;
  485. }
  486. table.tableblock.frame-sides {
  487.   border-top-style: hidden;
  488.   border-bottom-style: hidden;
  489. }
  490. table.tableblock.frame-none {
  491.   border-style: hidden;
  492. }
  493.  
  494. th.tableblock.halign-left, td.tableblock.halign-left {
  495.   text-align: left;
  496. }
  497. th.tableblock.halign-center, td.tableblock.halign-center {
  498.   text-align: center;
  499. }
  500. th.tableblock.halign-right, td.tableblock.halign-right {
  501.   text-align: right;
  502. }
  503.  
  504. th.tableblock.valign-top, td.tableblock.valign-top {
  505.   vertical-align: top;
  506. }
  507. th.tableblock.valign-middle, td.tableblock.valign-middle {
  508.   vertical-align: middle;
  509. }
  510. th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  511.   vertical-align: bottom;
  512. }
  513.  
  514.  
  515. /*
  516.  * manpage specific
  517.  *
  518.  * */
  519.  
  520. body.manpage h1 {
  521.   padding-top: 0.5em;
  522.   padding-bottom: 0.5em;
  523.   border-top: 2px solid silver;
  524.   border-bottom: 2px solid silver;
  525. }
  526. body.manpage h2 {
  527.   border-style: none;
  528. }
  529. body.manpage div.sectionbody {
  530.   margin-left: 3em;
  531. }
  532.  
  533. @media print {
  534.   body.manpage div#toc { display: none; }
  535. }
  536.  
  537.  
  538. </style>
  539. <script type="text/javascript">
  540. /*<![CDATA[*/
  541. var asciidoc = {  // Namespace.
  542.  
  543. /////////////////////////////////////////////////////////////////////
  544. // Table Of Contents generator
  545. /////////////////////////////////////////////////////////////////////
  546.  
  547. /* Author: Mihai Bazon, September 2002
  548.  * http://students.infoiasi.ro/~mishoo
  549.  *
  550.  * Table Of Content generator
  551.  * Version: 0.4
  552.  *
  553.  * Feel free to use this script under the terms of the GNU General Public
  554.  * License, as long as you do not remove or alter this notice.
  555.  */
  556.  
  557.  /* modified by Troy D. Hanson, September 2006. License: GPL */
  558.  /* modified by Stuart Rackham, 2006, 2009. License: GPL */
  559.  
  560. // toclevels = 1..4.
  561. toc: function (toclevels) {
  562.  
  563.   function getText(el) {
  564.     var text = "";
  565.     for (var i = el.firstChild; i != null; i = i.nextSibling) {
  566.       if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
  567.        text += i.data;
  568.      else if (i.firstChild != null)
  569.        text += getText(i);
  570.    }
  571.    return text;
  572.  }
  573.  
  574.  function TocEntry(el, text, toclevel) {
  575.    this.element = el;
  576.    this.text = text;
  577.    this.toclevel = toclevel;
  578.  }
  579.  
  580.  function tocEntries(el, toclevels) {
  581.    var result = new Array;
  582.    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
  583.    // Function that scans the DOM tree for header elements (the DOM2
  584.    // nodeIterator API would be a better technique but not supported by all
  585.    // browsers).
  586.    var iterate = function (el) {
  587.      for (var i = el.firstChild; i != null; i = i.nextSibling) {
  588.        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
  589.          var mo = re.exec(i.tagName);
  590.          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
  591.            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
  592.          }
  593.          iterate(i);
  594.        }
  595.      }
  596.    }
  597.    iterate(el);
  598.    return result;
  599.  }
  600.  
  601.  var toc = document.getElementById("toc");
  602.  if (!toc) {
  603.    return;
  604.  }
  605.  
  606.  // Delete existing TOC entries in case we're reloading the TOC.
  607.   var tocEntriesToRemove = [];
  608.   var i;
  609.   for (i = 0; i < toc.childNodes.length; i++) {
  610.     var entry = toc.childNodes[i];
  611.     if (entry.nodeName.toLowerCase() == 'div'
  612.      && entry.getAttribute("class")
  613.      && entry.getAttribute("class").match(/^toclevel/))
  614.       tocEntriesToRemove.push(entry);
  615.   }
  616.   for (i = 0; i < tocEntriesToRemove.length; i++) {
  617.     toc.removeChild(tocEntriesToRemove[i]);
  618.   }
  619.  
  620.   // Rebuild TOC entries.
  621.   var entries = tocEntries(document.getElementById("content"), toclevels);
  622.   for (var i = 0; i < entries.length; ++i) {
  623.     var entry = entries[i];
  624.     if (entry.element.id == "")
  625.       entry.element.id = "_toc_" + i;
  626.     var a = document.createElement("a");
  627.     a.href = "#" + entry.element.id;
  628.     a.appendChild(document.createTextNode(entry.text));
  629.     var div = document.createElement("div");
  630.     div.appendChild(a);
  631.     div.className = "toclevel" + entry.toclevel;
  632.     toc.appendChild(div);
  633.   }
  634.   if (entries.length == 0)
  635.     toc.parentNode.removeChild(toc);
  636. },
  637.  
  638.  
  639. /////////////////////////////////////////////////////////////////////
  640. // Footnotes generator
  641. /////////////////////////////////////////////////////////////////////
  642.  
  643. /* Based on footnote generation code from:
  644.  * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
  645.  */
  646.  
  647. footnotes: function () {
  648.   // Delete existing footnote entries in case we're reloading the footnodes.
  649.  var i;
  650.  var noteholder = document.getElementById("footnotes");
  651.  if (!noteholder) {
  652.    return;
  653.  }
  654.  var entriesToRemove = [];
  655.  for (i = 0; i < noteholder.childNodes.length; i++) {
  656.    var entry = noteholder.childNodes[i];
  657.    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
  658.      entriesToRemove.push(entry);
  659.  }
  660.  for (i = 0; i < entriesToRemove.length; i++) {
  661.    noteholder.removeChild(entriesToRemove[i]);
  662.  }
  663.  
  664.  // Rebuild footnote entries.
  665.  var cont = document.getElementById("content");
  666.  var spans = cont.getElementsByTagName("span");
  667.  var refs = {};
  668.  var n = 0;
  669.  for (i=0; i<spans.length; i++) {
  670.    if (spans[i].className == "footnote") {
  671.      n++;
  672.      var note = spans[i].getAttribute("data-note");
  673.      if (!note) {
  674.        // Use [\s\S] in place of . so multi-line matches work.
  675.        // Because JavaScript has no s (dotall) regex flag.
  676.        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
  677.        spans[i].innerHTML =
  678.          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
  679.          "' title='View footnote' class='footnote'>" + n + "</a>]";
  680.        spans[i].setAttribute("data-note", note);
  681.      }
  682.      noteholder.innerHTML +=
  683.        "<div class='footnote' id='_footnote_" + n + "'>" +
  684.        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
  685.        n + "</a>. " + note + "</div>";
  686.      var id =spans[i].getAttribute("id");
  687.      if (id != null) refs["#"+id] = n;
  688.    }
  689.  }
  690.  if (n == 0)
  691.    noteholder.parentNode.removeChild(noteholder);
  692.  else {
  693.    // Process footnoterefs.
  694.    for (i=0; i<spans.length; i++) {
  695.      if (spans[i].className == "footnoteref") {
  696.        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
  697.        href = href.match(/#.*/)[0];  // Because IE return full URL.
  698.        n = refs[href];
  699.        spans[i].innerHTML =
  700.          "[<a href='#_footnote_" + n +
  701.          "' title='View footnote' class='footnote'>" + n + "</a>]";
  702.      }
  703.    }
  704.  }
  705. },
  706.  
  707. install: function(toclevels) {
  708.  var timerId;
  709.  
  710.  function reinstall() {
  711.    asciidoc.footnotes();
  712.    if (toclevels) {
  713.      asciidoc.toc(toclevels);
  714.    }
  715.  }
  716.  
  717.  function reinstallAndRemoveTimer() {
  718.    clearInterval(timerId);
  719.    reinstall();
  720.  }
  721.  
  722.  timerId = setInterval(reinstall, 500);
  723.  if (document.addEventListener)
  724.    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  725.  else
  726.    window.onload = reinstallAndRemoveTimer;
  727. }
  728.  
  729. }
  730. asciidoc.install();
  731. /*]]>*/
  732. </script>
  733. </head>
  734. <body class="article">
  735. <div id="header">
  736. <h1>Freedoom</h1>
  737. </div>
  738. <div id="content">
  739. <div id="preamble">
  740. <div class="sectionbody">
  741. <div class="paragraph"><p>Freedoom is a project to create a complete Doom II-compatible IWAD file
  742. which is Free Software.</p></div>
  743. <div class="paragraph"><p>The IWAD file is the file used by Doom which contains all the game data
  744. (graphics, sound effects, music, etc.). While the Doom source code is
  745. Free, you currently still need one of the proprietary IWAD files from id
  746. in order to play Doom. Freedoom aims to create a Free alternative.
  747. Combined with the GPL-licensed Doom source code this will result in a
  748. complete Free Doom-based game.</p></div>
  749. <div class="paragraph"><p>For more information, see <a href="http://freedoom.github.io/">http://freedoom.github.io/</a>.</p></div>
  750. </div>
  751. </div>
  752. <div class="sect1">
  753. <h2 id="_what_8220_free_software_8221_means">What &#8220;Free Software&#8221; means</h2>
  754. <div class="sectionbody">
  755. <div class="paragraph"><p>When we speak of Free Software, we refer to the software movement in
  756. which your freedoms to use, copy, modify, and study it are ensured.  For
  757. example, you may freely use Freedoom for any purpose you see fit, you
  758. may redistribute it to anyone without needing to ask for permission, you
  759. may modify it (provided you keep the license intact, see <code>COPYING</code>), and
  760. you may study it&#8201;&#8212;&#8201;for example, to see how a Doom IWAD is built.  To
  761. facilitate this, you can get the full source code (here, in the form of
  762. a DeuTex tree) for Freedoom.</p></div>
  763. <div class="paragraph"><p>You may read more about Free Software at the <a href="http://www.gnu.org/">GNU</a>
  764. and <a href="http://www.fsf.org/">Free Software Foundation</a> websites.</p></div>
  765. </div>
  766. </div>
  767. <div class="sect1">
  768. <h2 id="_contributing_to_freedoom">Contributing to Freedoom</h2>
  769. <div class="sectionbody">
  770. <div class="paragraph"><p>Contributions to Freedoom are always welcome, however there are a few
  771. guidelines that should be followed:</p></div>
  772. <div class="sect2">
  773. <h3 id="_intellectual_property">Intellectual Property</h3>
  774. <div class="paragraph"><p>We know people hate legalese, but this is important.  This applies to
  775. <strong>everything</strong> which is submitted.</p></div>
  776. <div class="paragraph"><p>You must be incredibly careful when basing on existing graphics or
  777. sounds.  Most Doom projects are incredibly lax on reusing intellectual
  778. property&#8201;&#8212;&#8201;there are plenty of WADs out there which contain modified
  779. Doom sprites, for example.  However, due to the nature of this project,
  780. we do not have the same liberty to rip as we please.</p></div>
  781. <div class="paragraph"><p>The general rules go as follows:</p></div>
  782. <div class="ulist"><ul>
  783. <li>
  784. <p>
  785. Everything you submit must be 100% your own work.  You must not base
  786.    upon resources from Doom or any other game.  You may not even rip
  787.    textures from WADs you have downloaded (if you find a WAD with
  788.    textures in which look useful, let us know&#8201;&#8212;&#8201;that way, we can
  789.    contact the author).
  790. </p>
  791. </li>
  792. <li>
  793. <p>
  794. Do not simply copy the original resources.  Where possible, try to
  795.    make an effort to make the new versions look visibly different from
  796.    the originals.
  797. </p>
  798. </li>
  799. <li>
  800. <p>
  801. Be especially careful of &#8220;free texture&#8221; (or &#8220;free sound&#8221; or
  802.    &#8220;free graphic&#8221;) sites.  Although these would appear at first to
  803.    be okay to use, many are free for &#8220;non-commercial use only&#8221;.  One
  804.    of the things we want to be able to do is put this on GNU/Linux CDs
  805.    (which are sold&#8201;&#8212;&#8201;&#8220;a commercial use&#8221;).
  806. </p>
  807. </li>
  808. <li>
  809. <p>
  810. The main exception is that you may of course reuse anything in the
  811.    Freedoom source tree.  In fact, this is encouraged, as reusing
  812.    material will give the WAD a more consistent feel.
  813. </p>
  814. </li>
  815. </ul></div>
  816. </div>
  817. <div class="sect2">
  818. <h3 id="_levels">Levels</h3>
  819. <div class="paragraph"><p>Levels should be in Boom format; you may exceed the limits of Vanilla
  820. Doom and use Boom features; however, do not use features that are not
  821. supported by Boom 2.02 and compatible ports. Levels should be in Doom&#8217;s
  822. original format, not in &#8220;Hexen&#8221; format.</p></div>
  823. <div class="paragraph"><p>It is sensible to also heed the following guidelines:</p></div>
  824. <div class="ulist"><ul>
  825. <li>
  826. <p>
  827. Make sure that skill levels are implemented, and that all
  828.    multiplayer start points are present.
  829. </p>
  830. </li>
  831. <li>
  832. <p>
  833. Make levels appropriately difficult for their position within the
  834.    progression of the game.  Also bear in mind that not all players may
  835.    be as skilled a player as you.
  836. </p>
  837. </li>
  838. <li>
  839. <p>
  840. Do not use tricks that exploit Doom&#8217;s software renderer; some source
  841.    ports, especially those that use hardware accelerated rendering, may
  842.    not render it properly.  Examples of tricks to avoid include those used
  843.    to simulate 3D bridges and &#8220;deep water&#8221; effects.
  844. </p>
  845. </li>
  846. <li>
  847. <p>
  848. Boom removes almost all of the limits on rendering; however, do not
  849.    make excessively complicated scenes.  It is desirable that Freedoom
  850.    levels should be playable on old or low-powered hardware.
  851. </p>
  852. </li>
  853. <li>
  854. <p>
  855. Always test in <a href="http://www.teamtnt.com/boompubl/boom2.htm">Boom</a>
  856.    itself rather than a derivative such as PrBoom.  This ensures that
  857.    your levels really are Boom-compatible rather than using any extra
  858.    features.  As DOS is rather rare these days, you may not have a
  859.    system which can run Boom natively, so you may use either
  860.    <a href="http://www.dosbox.com/">DOSBox</a> or <a href="http://www.freedos.org/">FreeDOS</a>.
  861. </p>
  862. </li>
  863. </ul></div>
  864. </div>
  865. <div class="sect2">
  866. <h3 id="_graphics">Graphics</h3>
  867. <div class="ulist"><ul>
  868. <li>
  869. <p>
  870. Graphics should be the same color and size as the originals to
  871.    remain compatible with PWADs (otherwise, they may end up looking
  872.    like a mess).  They cannot use the Doom font.
  873. </p>
  874. </li>
  875. <li>
  876. <p>
  877. Textures should be the same dimensions as the originals.  They
  878.    should be similar but not identical (to avoid IP infringement)&#8201;&#8212;&#8201;    in fact, they should be as different as possible while keeping to
  879.    the general theme of the texture.  As mentioned above, try to make
  880.    a conscious effort to make the textures visibly different from the
  881.    originals.  Critically, the textures should tile in the same way as
  882.    the originals.
  883. </p>
  884. </li>
  885. <li>
  886. <p>
  887. Some textures contain the letters UAC or references to UAC; this is
  888.    an intellectual property of id Software (trademarked).  Instead, use
  889.    the letters AGM in your textures.
  890. </p>
  891. </li>
  892. <li>
  893. <p>
  894. Sprites should be roughly the same size and shape, but different to
  895.    the originals.  Doom monsters are id&#8217;s intellectual property (which
  896.    means no imps, cyberdemons, etc).  The new monsters will behave the
  897.    same way as the originals, but will be totally new.
  898. </p>
  899. </li>
  900. </ul></div>
  901. </div>
  902. <div class="sect2">
  903. <h3 id="_documentation">Documentation</h3>
  904. <div class="paragraph"><p>Freedoom always needs help with the documentation, so please send your
  905. patches, but keep in mind:</p></div>
  906. <div class="ulist"><ul>
  907. <li>
  908. <p>
  909. We use <a href="http://www.methods.co.nz/asciidoc/">AsciiDoc</a> for writing the
  910.    documentation.  AsciiDoc is a simple plaintext-based format which is
  911.    simple to read and write in its source form, and makes pretty HTML
  912.    documents out of them (it also supports other formats like
  913.    DocBook/PDF/manual pages&#8230;).
  914. </p>
  915. </li>
  916. <li>
  917. <p>
  918. Headers are formated in a wiki-style format, this makes it easier
  919.    for Vim (perhaps other editors, too) to automatically re-format
  920.    text.
  921. </p>
  922. </li>
  923. <li>
  924. <p>
  925. Text is kept at 72 characters wide.  In Vim, you can set the editor
  926.    to automatically insert line breaks as you&#8217;re typing by performing
  927.    <code>set textwidth=72</code>.  Special exceptions to the width rule might be
  928.    allowed when necessary (for example, inserting long URLs).
  929. </p>
  930. </li>
  931. </ul></div>
  932. </div>
  933. <div class="sect2">
  934. <h3 id="_submitting_your_work">Submitting your work</h3>
  935. <div class="paragraph"><p>TODO: Figure out the best method of doing this.  This mainly requires
  936. time to see what works best.</p></div>
  937. <div class="paragraph"><p>If you use git, make sure your commit messages start with a single
  938. line, under 72 characters, which provides an adequate summary of your
  939. changes. You should prefix this line with the component you are commit
  940. (for example, &#8220;map17: fixed unbeatable map&#8221;). This should be
  941. followed by a blank line and more explanation if it&#8217;s needed (for
  942. example, explaining what part of the map was broken). The commit
  943. 2013-12-20T16:06:55Z!<a href="mailto:rjy@users.sourceforge.net">rjy@users.sourceforge.net</a> shows a good example of
  944. a well-structured commit message.</p></div>
  945. <div class="paragraph"><p>You should commit often; each important change should get its own
  946. commit, but minor changes need not.  Take advantage of git&#8217;s ability to
  947. rewrite history, don&#8217;t use <code>git revert</code> on your private copy of the
  948. repository, just remove (<code>git reset</code>) or amend (<code>git commit --amend</code>)
  949. the faulty commit as necessary.  Leave all the interesting and important
  950. history bits, leave out stupid mistakes like spell check errors.</p></div>
  951. </div>
  952. </div>
  953. </div>
  954. </div>
  955. <div id="footnotes"><hr /></div>
  956. <div id="footer">
  957. <div id="footer-text">
  958. Last updated 2014-01-01 14:49:16 PST
  959. </div>
  960. </div>
  961. </body>
  962. </html>
  963.